算法思路(递归):
深搜遍历图,从图某个初始顶点v出发
- 访问顶点v,标记为访问过
- 选择一个顶点v相邻并且没被访问过的顶点w
- 以w为初始顶点进行深度优先搜索,直到所有顶点都标记为访问过
沿着图的一条路一直走到走不通,再回溯到第一个没被访问过的点(一条路走到尽头就回头)
对于这样的一个图以1为初始顶点则深度优先遍历结果为:123456789
模板函数:
bool flag[MAXN];
void DFS(int v)//初始顶点v
{
vis[v]=true;//访问顶点v
cout<<v;
for(int w=0;w<n;w++) //遍历所有点
{
if(!flag[w]&&map[v][w])//判断当前顶点是否被访问,是否与顶点v相邻
DFS(w); //以w为初始顶点进行深度优先遍历
}
}