大家好,到处都有图纸的解释,以便从adj。创建图表。矩阵。但是,我需要简单的伪代码或算法....我知道如何从adj中绘制它。矩阵,不知道为什么没有人在哪里解释如何实际把它放在代码中。我不是指实际代码,但至少是算法...很多人说... 1如果有边缘我知道...我创建了adj。矩阵,不知道如何将其转移到图表。我的顶点没有名称,它们只是矩阵的索引。例如1-9是“我的矩阵的名称”
1 2 3 4 5 6 7 8 9
1 0 1 0 0 1 0 0 0 0
2 1 0 1 0 0 0 0 0 0
3 0 1 0 1 0 0 0 0 0
4 0 0 1 0 0 1 0 0 0
5 1 0 0 0 0 0 1 0 0
6 0 0 0 1 0 0 0 0 1
7 0 0 0 0 1 0 0 1 0
8 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 1 0 0 0
原来是一个迷宫...必须将row1 col4标记为start和row7 col8 end ...
没有人告诉我如何用矩阵实现图形(没有笔):Pp
感谢
答案 0 :(得分:1)
对称性
Adjancency矩阵是图表的表示。对于无向图,其矩阵是对称的。例如,如果从vertex i
到vertex j
存在边缘,则必须存在从vertex j
到vertex i
的边缘。实际上这是相同的边缘。
*
*
* A'
A *
*
*
<强>算法强>
注意到这种性质,您可以像以下一样简单地实现算法:
void drawGraph(vertices[nRows][nCols])
{
for (unsigned int i = 0; i < nRows; ++i)
{
for (unsigned int j = i; j < nCols; ++j)
{
drawLine(i, j);
}
}
}
答案 1 :(得分:1)
您可以将图形从邻接矩阵表示转换为基于节点的表示,如下所示:
#include <iostream>
#include <vector>
using namespace std;
const int adjmatrix[9][9] = {
{0,1,0,0,1,0,0,0,0},
{1,0,1,0,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,0,1,0,0,1,0,0,0},
{1,0,0,0,0,0,1,0,0},
{0,0,0,1,0,0,0,0,1},
{0,0,0,0,1,0,0,1,0},
{0,0,0,0,0,0,1,0,0},
{0,0,0,0,0,1,0,0,0}
};
struct Node {
vector<Node*> neighbours;
/* optional additional node information */
};
int main (int argc, char const *argv[])
{
/* initialize nodes */
vector<Node> nodes(9);
/* add pointers to neighbouring nodes */
int i,j;
for (i=0;i<9;++i) {
for (j=0;j<9;++j) {
if (adjmatrix[i][j]==0) continue;
nodes[i].neighbours.push_back(&nodes[j]);
}
}
/* print number of neighbours */
for (i=0;i<9;++i) {
cout << "Node " << i
<< " has " << nodes[i].neighbours.size() <<" outbound edges." << endl;
}
return 0;
}
这里,图表表示为具有指向可到达的相邻节点的指针的节点阵列。在设置节点及其邻居指针之后,您可以使用此数据结构来执行所需的图算法,在此(简单)示例中打印出每个节点具有的出站有向边数。