2141-資料結構實驗之圖論一:基於鄰接矩陣的廣度優先搜尋遍歷
阿新 • • 發佈:2019-01-23
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <cstring>
using namespace std;
int map[1123][1123]; ///儲存鄰接表
int vis[1123]; /// 標記節點是否已訪問
int ans[1123]; /// 儲存遍歷序列
int p;
void bfs(int k, int n)
{
p = 0;
queue<int>Q;
vis[k] = 1 ;
ans[p++] = k; /// 將起點放入遍歷序列
Q.push(k);
while(!Q.empty())
{
int x = Q.front();
Q.pop();
for(int i = 0; i < n; i++)
{
if(!vis[i] && map[x][i]) /// 如果兩點相連並且未訪問過
{
vis[i] = 1;
ans[p++] = i;
Q.push(i);
}
}
}
//cout << p << endl;
}
int main()
{
int t;
int n,m,k;
cin >> t;
while(t--)
{
int u,w; /// 節點
cin >> n >> m >> k;
memset(map, 0 ,sizeof(map));
memset(vis, 0, sizeof(vis));
while(m--)
{
cin >> u >> w;
map [u][w] = map[w][u] = 1; /// 此時將鄰接表兩點賦值為1 表示兩點相連
}
bfs(k, n);
//cout << p << endl;
for(int i = 0; i < p; i++)
{
i + 1 == p ? cout << ans[i] << endl : cout << ans[i] << " ";
}
}
return 0;
}