簡體   English   中英

使用鄰接矩陣進行深度優先搜索

[英]Depth First Search Using Adjacency Matrix

誰能解釋使用鄰接矩陣進行深度優先搜索的算法? 我知道使用遞歸的深度優先搜索的算法,我嘗試使用Adjacency矩陣實現它,但它不是很成功。

到目前為止我所擁有的是什么

 dfs(G,i){

  mark i as visited;

  for(traverse through the edges of i vertex){

     if(vertex of edge is unseen){

       DFS(G,newVerted)
     }
   }

}
    void DFS(int i)
    {
        int j;
        printf("\n%d",i);
        visited[i]=1;
        for(j=0;j<n;j++)
            if(!visited[j]&&G[i][j]==1)
                DFS(j);
    }

其中n是頂點的否, G是圖形, G[i][j]表示頂點i連接到頂點j

您錯過了在函數dfs(G,i)打印

代碼如下

dfs(G,i){
int j;
printf("%d ",i);
visited[i]=1;
for(j=0;j<n;j++){
    if(visited[j]==0&&G[i][j]==1)
        dfs(G,j);
}

這里我們使用變量n作為Graph中的頂點數.G是成本鄰接矩陣。

我認為這是最簡單的,就像在迷宮中你總是離開。 如果你來自n節點,則按周期順序進入下一個節點。

我只是不知道你怎么知道你到處走走:D但很酷的是你不需要額外的空間和標記。

編輯

    5
   / \
  7   3
 /\   /\
4  1 6  2

我是

......1
..1....
.1..11.
1.....1
..1...1
..1....
1..11..

所以從5開始的訂購是3 6 3 2 3 5 7 1 7 4 7 5 3#並且因為你從5-> 3開始

正如我所說,如果你在節點上,你可以根據你來自的節點繼續下一個節點。 您要訪問的下一個節點是來自主流節點的下一個號碼(不是您當前的節點)。

我猜你可以通過維護堆棧和訪問列表,並使用while循環來實現:訪問是一個bool [],初始化為在所有位置保持false,我假設調用G [node,neighbor]以某種方式返回一個布爾值,告訴我是否存在從節點到鄰居的邊緣。 (與1的隱式比較或簡單地使鄰接矩陣保持布爾值)
Stack保存節點的索引:

dfs(G,i){
    Initialize Stack
    Current = i
    PossibleEdge = 0
    Visited[Current] = true  //You have visited the starting node
    Do {
        While (PossibleEdge < count) {
            if (G[Current,PossibleEdge] && NOT Visited[PossibleEdge]){
                Stack.Push(Current)      //Save state
                Current = PossibleEdge   //Continue with the child node
                Visited[Current] = true 
                PossibleEdge = -1        //So that it will be incremented to 0
            }
            PossibleEdge++
        }
        PossibleEdge = Current           //Continue to next row of "parent node"
        Current = Stack.Pop()            //Get parent node back
    } While (Stack contains nodes)
}

我確信它可以被優化(並且看到我已經厭倦了,可能會有一些邏輯錯誤),但如果基本程序有意義,那就是一個開始!
編輯:澄清,並添加此提示:遞歸可能更容易;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM