首页 > 代码库 > 图算法(一)——基本图算法(BFS,DFS及其应用)(2)

图算法(一)——基本图算法(BFS,DFS及其应用)(2)

2)DFS

深度优先搜索总是对最近发现的节点v的出发边进行搜索,直到该节点的所有出发边都被发现

一旦节点v的所有出发边都被发现,搜索回溯到v的前驱结点进行

实现细节:时间戳

每一个结点有一个发现时间和完成时间

DFS后原图的前驱子图构成一个深度优先森林

 1 #include<iostream> 2 using namespace std; 3 #define NIL -1 4 int g[1000][1000]; 5 int n; 6 struct Node 7 { 8     int color; 9     int d;10     int f;11     int pi;12 }t[1000];13 int time;14 15 void DFS();16 void DFS_VISIT(int u);17 18 void DFS()19 {20     for (int i=0;i<n;i++)21     {22         t[i].color = 0;23         t[i].pi = NIL;24     }25     time=1;26     for (int i=0;i<n;i++)27     {28         if (t[i].color == 0)29             DFS_VISIT(i);30     }31 }32 void DFS_VISIT(int u)33 {34     t[u].d = time++;35     t[u].color = 1;            /*****/36     for (int v=0;v<n;v++)37     {38         if ((g[u][v] == 1)&&(t[v].color == 0))39         {40             t[v].pi = u;41             DFS_VISIT(v);42         }43     }44     t[u].f = time++;45 }46 /*47 int main()48 {49     while (cin>>n)50     {51         for (int i=0;i<n;i++)52         {53             for (int j=0;j<n;j++)54             {55                 cin>>g[i][j];56             }57         }58         DFS();59         for (int i=0;i<n;i++)60             cout<<i<<" "<<t[i].d<<" "<<t[i].f<<" "<<endl;61     }62     return 0;63 }64 */

 

图算法(一)——基本图算法(BFS,DFS及其应用)(2)