Problem7418--学习系列 —— 图上 BFS

7418: 学习系列 —— 图上 BFS

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

图上 BFS,就是以图的某个顶点做为 root,开始 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;
                    }
            }
        }
}

Source/Category