图的宽度优先搜索(数组实现)

来源:互联网 发布:网络连接中断 编辑:程序博客网 时间:2024/04/27 08:47

图的广度优先搜索(邻接矩阵)
Description

图采用邻接矩阵存储,图中的顶点数为n(0< n <20),顶点信息为整数,依次为

0,1,..,n-1。

编写函数,输入图的类型,0:无向图,1:有向图;输入图的顶点数、边数、边的偶

对,建立邻接矩阵;

编写函数,实现图的广度优先搜索,输出广度优先搜索序列。

调用上述函数,从0号顶点出发,输出图的广度优先搜索序列,以空格分隔

Input

第1行:图的类型 ( 0:无向图,1:有向图)

第2行:图的顶点数,边数

第3行开始,每行一个边的偶对,如vi,vj

Output

以空格分隔的广度优先遍历序列

Sample Input

0
6,7
0,1
0,2
0,4
1,4
2,5
3,4
3,5
Sample Output

0 1 2 4 5 3

#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int MAX(0x3f3f3f3f);int mp[30][30];int visit[30];int vexnum,arcnum;queue<int>q;void BFS(int k){    cout<<k<<" ";    visit[k]=1;    q.push(k);    while(!q.empty())    {        int t=q.front();        q.pop();        visit[t]=1;        for(int i=0;i<vexnum;i++)        {            if(mp[t][i]&&!visit[i])            {                cout<<i<<" ";                visit[i]=1;                q.push(i);            }        }    }}void BfsTravel(int k){    memset(visit,0,sizeof(visit));    for(int i=0;i<vexnum;i++)    {        if(!visit[i])            BFS(i);    }}int main(){    int flag=0;    memset(mp,0,sizeof(mp));    cin>>flag;    char ch;    cin>>vexnum>>ch>>arcnum;    for(int i=0;i<arcnum;i++)    {        int a,b;        cin>>a>>ch>>b;        if(!flag)            mp[a][b]=mp[b][a]=1;        else            mp[a][b]=1;    }    BfsTravel(0);}
原创粉丝点击