C++ 检查图形是否使用BFS连接并打印MST
我存储了一个节点为1,2,3,4,。。。在邻接列表中。 我写这段代码是为了做广度优先搜索BFS。BFS的工作原理非常完美,但我不知道如何确定图是连接的还是断开的,然后打印图的最小生成树(如果是连接的)? 我存储在邻接列表中的图形示例:C++ 检查图形是否使用BFS连接并打印MST,c++,queue,breadth-first-search,minimum-spanning-tree,adjacency-list,C++,Queue,Breadth First Search,Minimum Spanning Tree,Adjacency List,我存储了一个节点为1,2,3,4,。。。在邻接列表中。 我写这段代码是为了做广度优先搜索BFS。BFS的工作原理非常完美,但我不知道如何确定图是连接的还是断开的,然后打印图的最小生成树(如果是连接的)? 我存储在邻接列表中的图形示例: 1 3 4 2 4 3 1 4 4 2 1 3 以及BFS的代码: int visit[999] = { 0 }; Q.enqueue(0); while (!Q.isEmpty()) { y = Q.deque
1 3 4
2 4
3 1 4
4 2 1 3
以及BFS的代码:
int visit[999] = { 0 };
Q.enqueue(0);
while (!Q.isEmpty())
{
y = Q.dequeue();
traverse = g[y];
while (traverse->link != 0)
{
if (visit[traverse->data-1] == 0)
{
visit[traverse->data-1] = 1;
parent = traverse->data;
Q.enqueue(traverse->data-1);
}
traverse = traverse->link;
}
if (visit[traverse->data - 1] == 0)
{
visit[traverse->data - 1] = 1;
parent = traverse->data;
Q.enqueue(traverse->data - 1);
}
}
所以我找到了答案,并把它作为其他人的参考:
int parent = 1;
gcounter++;
p = 0;
int visit[999] = { 0 };
int c[999] = { 0 };
int k = 0;
int z = 0;
Queue Q;
Q.enqueue(0);
while (!Q.isEmpty())
{
y = Q.dequeue();
traverse = g[y];
while (traverse->link != 0)
{
if (visit[traverse->data-1] == 0)
{
if (y + 1 != traverse->data)
{
c[z] = y + 1;z++;
c[z] = traverse->data; z++;
}
p++;
visit[traverse->data-1] = 1;
parent = traverse->data;
Q.enqueue(traverse->data-1);
}
traverse = traverse->link;
}
if (visit[traverse->data - 1] == 0)
{
if (y + 1 != traverse->data)
{
c[z] = y + 1; z++;
c[z] = traverse->data; z++;
}
p++;
visit[traverse->data - 1] = 1;
parent = traverse->data;
Q.enqueue(traverse->data - 1);
}
}
if (p < lcounter) //lcounter-> the lines -> total number of nodes
{
writeFile << "The Graph is disconnected" << endl;
}
else
{
writeFile << "The Graph is connected and it's MST is: ";
for (z = 0; c[z+1] != 0; z++)
{
writeFile << "(" << c[z] << "," << c[z + 1] << ") ";
z++;
}
writeFile << endl;
}