1. 程式人生 > >【圖論】圖的遍歷

【圖論】圖的遍歷

最近就是光想多打點字 水部落格啥的感覺心裡很舒服 可以用來發洩

圖的遍歷 主要兩個方式 DFS BFS
應該也算是有模板吧 但我沒按模板的格式寫

DFS就是從一個點開始搜啊 如果下一個點沒搜到過就繼續搜啊 這條路到頭了就換路搜啊
應該很好實現吧 。 嗯

void dfs(ll x){
        exist[x] = ture;
        for(register int i=head[x];i;i=edge[i].next)
                if(!exist[edge[i].to)
                        dfs(edge[i].to
); }

bfs的話應該要稍微麻煩一點 因為還要考慮佇列的問題 大概就是先把這個點周圍的都按順序入隊 然後再把入隊的點逐個列舉 從而把它周圍的點再入隊

inline void bfs(ll x){
        ui top;
        q[++top] = x;
        for(register int i=1;i<=top;i++)
                for(register int j=head[q[i]];j;j=edge[i].next)
                        if(!exist[edge[j].to])
                                q[++top]
= edge[j].to; }

c++還有STL的佇列 大概是這麼寫(從來沒寫過)

#include<queue>
queue <ll> q;
inline void bfs(ll x){
        q.push(x);
        while(!q.empty()){
                for(register int i=head[q.front()];i;i=edge[i].next)
                        if(!exist[edge[i].to])
                                q.push(edge[i].to);
                q.pop();
        }
}

COYG