12. 图的广度优先遍历

本实验实现邻接表表示下无向图的广度优先遍历。
程序的输入是图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。例如:

程序输入为:
a
b
c
d
e
f
*
0,1
0,4
1,4
1,5
2,3
2,5
3,5
-1,-1

程序的输出为:
the ALGraph is
a 4 1
b 5 4 0
c 5 3
d 5 2
e 1 0
f 3 2 1
the Breadth-First-Seacrh list:aebfdc

测试用例
用例1
输入:
a
b
c
d
e
f
*
0,1
0,4
1,4
1,5
2,3
2,5
3,5
-1,-1
输出:
the ALGraph is
a 4 1
b 5 4 0
c 5 3
d 5 2
e 1 0
f 3 2 1
the Breadth-First-Seacrh list:aebfdc

解析:建个邻接表然后直接BFS就好,注意BFS进队列时要按序列号从大到小。

代码

#include<iostream>
#include<string>
#include<queue>
using namespace std;

struct
{
    string name;
    int sonList[100];
    int sonNum = 0;
    int vir = 0;
}Node[100];
int num = 0, nx, ny;
void BFS(int x)
{
    queue<int>q;
    int k0 = x, k1;
    Node[k0].vir = 1;
    q.push(k0);
    while (!q.empty())
    {
        k0 = q.front();
        q.pop();
        cout << Node[k0].name;
        if (Node[k0].sonNum == 0)
            continue;
        for (int i = Node[k0].sonNum - 1; i >= 0; i--)
        {
            k1 = Node[k0].sonList[i];
            if (Node[k1].vir == 1)
                continue;
            q.push(k1);
            Node[k1].vir = 1;
        }
    }
}
int main()
{
    while (1)
    {
        cin >> Node[num].name;
        if (Node[num].name == "*")
            break;
        num++;
    }
    while (1)
    {
        scanf("%d,%d", &nx, &ny);
        if (nx == -1)
            break;
        Node[nx].sonList[Node[nx].sonNum] = ny;
        Node[nx].sonNum++;
        Node[ny].sonList[Node[ny].sonNum] = nx;
        Node[ny].sonNum++;
    }
    cout << "the ALGraph is" << endl;
    for (int i = 0; i < num; i++)
    {
        cout << Node[i].name;
        for (int j = Node[i].sonNum - 1; j >= 0; j--)
            cout << " " << Node[i].sonList[j];
        cout << endl;
    }
    cout << "the Breadth-First-Seacrh list:";
    for (int i = 0; i < num; i++) //注意其他分支树
    {
        if (Node[i].vir == 0)
            BFS(i);
    }
    cout << endl;

    return 0;
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/qq_38597315/article/details/78691783
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞