無向圖的DFS遍歷(方法之一)


 

如果看不懂輔助解釋在后面第5


 

1、錄入方式:

 

輸入 u - v  表示一邊的2個端點

2、存儲結構

struct edge
{
    int from;
    int to;
    int next;
} e[MAXN];

int head[MAXN];   //head[u]表示 以u為父節點的邊鏈表的頭

 

3、建圖方法

void build(int u, int v)
{
    e[cnt].from = u;
    e[cnt].to = v;
    e[cnt].next = head[u];// next = 之前u為父節點的邊的編號
    head[u] = cnt;//更新head[u]
    cnt++;
}

        cin>>u>>v;
        build(u,v);
        build(v,u);    

4、DFS函數編寫

void dfs(int u)
{
    int edge = head[u];
    for(int i = edge; i != -1; i = e[i].next )
    {
        vis[u] = 1;
        int v = e[i].to;
        if(vis[v] == 0)
        {
            dfs(v);
        }
    }
    return ;
}

 


5、一些解釋:

 總體方法是head[u]存放以u(頂點)為from的邊的編號,通過head[u]找到一條邊,並且這條邊是 一系列以u為from的邊 組成的鏈表的頭,通過這個頭用鏈表的方式(e[i].next)去遍歷所有以u為from的邊  。  所以數據類型是這樣的 : head[頂點編號] = 邊的編號 ;   e[邊的編號].next = 邊的編號 。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM