winforms 如何在C#中将形容词矩阵可视化为图形?

46scxncf  于 2023-01-26  发布在  C#
关注(0)|答案(1)|浏览(282)

我有一个winforms应用程序,它使用Prim算法来解决旅行商问题,我需要将邻接矩阵转换为图形,它是以DataGridView的形式实现的,可以做到吗?
我试着通过在PictureBox上的随机位置放置顶点并用线连接它们来进行可视化,但没有成功。

weylhg0b

weylhg0b1#

可以,可以将DataGridView中表示的邻接矩阵转换为TSP问题的图形。一种方法是迭代DataGridView中的单元格,并为非零值的图形添加边。
关于可视化,使用专门的图形可视化库(如QuickGraph)可能更有效。
以下是如何使用QuickGraph显示图形的示例:

var graph = new AdjacencyGraph<string, Edge<string>>();

graph.AddVertex("A");
graph.AddVertex("B");
graph.AddVertex("C");
graph.AddVertex("D");

graph.AddEdge(new Edge<string>("A", "B", 2));
graph.AddEdge(new Edge<string>("A", "C", 3));
graph.AddEdge(new Edge<string>("B", "C", 1));
graph.AddEdge(new Edge<string>("B", "D", 4));
graph.AddEdge(new Edge<string>("C", "D", 5));

var prim = new PrimMinimumSpanningTreeAlgorithm<string, Edge<string>>(graph);
prim.Compute();

var tour = new List<string>();
foreach (var edge in prim.TreeEdges)
{
    tour.Add(edge.Source);
    tour.Add(edge.Target);
}

var g = pictureBox1.CreateGraphics();
for (int i = 0; i < tour.Count - 1; i++)
{
    g.DrawLine(Pens.Black, x[tour[i]], y[tour[i]], x[tour[i + 1]], y[tour[i + 1]]);
}

相关问题