图的深度优先遍历特点——选定一个出发点后进行遍历,能前进则前进,若不能前进,回退再前进。依此重复,直到所有与选定点相通的所有顶点都被遍历。同时我们知道,深度优先搜索是一个递归的过程
这里使用了邻接矩阵来表示无向图,很好写的:e[x][y]=1和e[y][x]=1
为了避免一个点重复遍历,我们需要用到一个标记数组,每一次遍历,就要把当前值做上标记。当当前值有相通的点,且这个相通的点没有遍历过,即进行一次递归。
#include <iostream>
using namespace std;
int n,m,e[100][100],v[100];
void dfs(int cur)
{
cout << cur << ' ';
v[cur]=1;
for(int i=1;i<=n;i++)
{
if(e[cur][i]==1 && v[i]==0)
dfs(i);
}
}
int main()
{
cin >> n >> m;
int x,y;
for(int i=1;i<=m;i++)
{
cin >> x >> y;
e[x][y]=1;
e[y][x]=1;
}
dfs(1);
return 0;
}