您的位置:首页 > 其它

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

2014-11-26 22:03 134 查看
2)DFS

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

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

实现细节:时间戳

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

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

#include<iostream>
using namespace std;
#define NIL -1
int g[1000][1000];
int n;
struct Node
{
int color;
int d;
int f;
int pi;
}t[1000];
int time;

void DFS();
void DFS_VISIT(int u);

void DFS()
{
for (int i=0;i<n;i++)
{
t[i].color = 0;
t[i].pi = NIL;
}
time=1;
for (int i=0;i<n;i++)
{
if (t[i].color == 0)
DFS_VISIT(i);
}
}
void DFS_VISIT(int u)
{
t[u].d = time++;
t[u].color = 1;            /*****/
for (int v=0;v<n;v++)
{
if ((g[u][v] == 1)&&(t[v].color == 0))
{
t[v].pi = u;
DFS_VISIT(v);
}
}
t[u].f = time++;
}
/*
int main()
{
while (cin>>n)
{
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
cin>>g[i][j];
}
}
DFS();
for (int i=0;i<n;i++)
cout<<i<<" "<<t[i].d<<" "<<t[i].f<<" "<<endl;
}
return 0;
}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: