7418: 学习系列 —— 图上 BFS
[Creator : ]
Description
图上 BFS,就是以图的某个顶点做为 root,开始 BFS。
运用 BFS 遍历整张图,最后得到许多棵树。
运用 BFS 遍历整张图,最后得到许多棵树。
时间复杂度
使用连接表
$O(V+E)$,其中 $V$ 是顶点数,$E$ 是边数。使用连接矩阵
$O(V^2)$。Input
bool adj[9][9]; // 一張圖,資料結構為adjacency matrix。 bool visit[9]; // 記錄圖上的點是否遍歷過,有遍歷過為true。 void BFS() { // 建立一個queue。 queue<int> q; // 全部的點都初始化為尚未遍歷 for (int i=0; i<9; i++) visit[i] = false; for (int k=0; k<9; k++) if (!visit[k]) { // 一、把起點塞入queue。 q.push(k); visit[k] = true; // 二、重複下述兩點,直到queue裡面沒有東西為止: while (!q.empty()) { // 甲、queue彈出一點。 int i = q.front(); q.pop(); // 乙、找出跟此點相鄰的點,並且尚未遍歷的點, // 依照編號順序通通塞入queue。 for (int j=0; j<9; j++) if (adj[i][j] && !visit[j]) { q.push(j); visit[j] = true; } } } }