sdut OJ2141---圖論--用的數組+BFS



給定一個無向連通圖,頂點編號從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的遍歷結果。

Sample Input

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

Sample Output

0 3 4 2 5 1

Hint

以鄰接矩陣作爲存儲結構。


給定一個無向連通圖,頂點編號從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的遍歷結果。

Sample Input

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

Sample Output

0 3 4 2 5 1

Hint

以鄰接矩陣作爲存儲結構。
其實2141和2142這兩個題要求一樣,就是做法不同



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int map[105][105];
int s[105];
int k,m,t,n,q;
int vis[105][105];
void BFS()
{
    int x,y,j;
    int enter,out;
    enter=1;
    out=0;
    s[0]=t;
    while(out<enter)
    {
        x=s[out++];
        for(j=0; j<k; j++)
        {
            y=j;
            if(map[x][y]==1&&!vis[x][y]&&y<k)
            {
                s[enter++]=y;
                vis[x][y]=1;
                vis[y][x]=1;
            }
        }
    }
}
int main()
{
    int a,b,i;
    scanf("%d",&n);
    while(n--)
    {

        memset(vis,0,sizeof(vis));
        memset(s,0,sizeof(s));
        scanf("%d%d%d",&k,&m,&t);
        while(m--)
        {
            scanf("%d%d",&a,&b);
            map[a][b]=1;
            map[b][a]=1;
        }
        BFS();
        for(i=0; i<k; i++)
            printf("%d ",s[i]);
        printf("\n");
    }
    return 0;
}
發佈了31 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章