数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历

来源:互联网 发布:大数据统计图 编辑:程序博客网 时间:2024/06/10 16:13

数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description

给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
Input

输入第一行为整数n(0< n <100),表示数据的组数。
对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
Output

输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。
Example Input

1
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5
Example Output

0 3 4 2 5 1
Hint

以邻接矩阵作为存储结构。
Author

#include<bits/stdc++.h>using namespace std;int Map[222][222],Vis[222],ans[222];//Map[][]为邻接矩阵用来存图 Vis[]用来标记节点是否访问 ans[]来保存遍历结果int p;void BFS(int t,int n) //t是起点,n是节点个数{    queue <int> Q;    Vis[t]=1;    ans[p++]=t; //首先访问起点    Q.push(t);    while(!Q.empty())    {        int v=Q.front();        Q.pop();        for(int i=0; i<v; i++)        {            if(!Vis[i]&&Map[v][i])            {                Vis[i]=1;                ans[p++]=i;                Q.push(i);            }        }        for(int i=v; i<n; i++)        {            if(!Vis[i]&&Map[v][i])            {                Vis[i]=1;                ans[p++]=i;                Q.push(i);            }        }    }}int main(){    int T,k,m,t,i,u,v;    cin>>T;    while(T--)    {        cin>>k>>m>>t;        memset(Map,0,sizeof(Map));        memset(Vis,0,sizeof(Vis));        for(i=0; i<m; i++)        {            cin>>u>>v;            Map[u][v]=1;            Map[v][u]=1;        }        BFS(t,k);        for(int i=0; i<p; i++)            cout<<ans[i]<<" ";        p=0;    }    return 0;}/***************************************************Result: AcceptedTake time: 0msTake Memory: 356KBSubmit time: 2017-02-20 20:37:53****************************************************/

C代码:

#include <iostream>#include <bits/stdc++.h>using namespace std;int Map[100][100];int vis[100];int c[1000];int a = 0;int b = 1, k;void BFS(int t){    for(int i = 0; i < k; i++)    {        if(Map[t][i] == 1 && vis[i] == 0)        {            c[b++] = i;            vis[i] = 1;        }    }    if(a <= b)        BFS(c[++a]);}int main(){    int n,u,v,t,m;    cin>>n;    while(n--)    {        memset(Map,0,sizeof(Map));        memset(vis,0,sizeof(vis));        cin>>k>>m>>t;        for(int i = 0; i < m; i++)        {            cin>>u>>v;            Map[u][v] = Map[v][u] = 1;        }        c[0] = t;        vis[t] = 1;        BFS(t);        for(int i = 0; i < b; i++)        {            if(i == b-1)            {                cout<<c[i]<<endl;            }            else                cout<<c[i]<<" ";        }    }    return 0;}
阅读全文
0 0
原创粉丝点击