C++ 检查图形是否使用BFS连接并打印MST

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,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.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;

        }