1. 程式人生 > >2141-資料結構實驗之圖論一:基於鄰接矩陣的廣度優先搜尋遍歷

2141-資料結構實驗之圖論一:基於鄰接矩陣的廣度優先搜尋遍歷

#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; }