dfs 深度优先搜索
代码:
#include <iostream>
using namespace std;
int n; //顶点数
const int M = 500;
int graph[M][M];
bool visit[M];
void dfs(int k){
visit[k] = 1;
cout<<k+1<<" ";
for(int i = 0; i < n; i++)
if(visit[i]==0 && graph[k][i]==1)
dfs(i);
}
int main()
{
cin>>n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin>>graph[i][j];
for(int i = 0; i < n; i++) //遍历所有类型的图
if(visit[i]== 0)
dfs(i);
return 0;
}
图的存储结构: 邻接矩阵,也就是二维数组 graph。 M 开到 500 表示图的顶点最多为 500。实际顶点是 n ,由终端输入。
visit 数组用来确定顶点是否被访问过。 0 代表未被访问。
示例:
输入:
9
0 1 1 0 0 1 0 0 1
1 0 0 1 0 0 0 0 0
1 0 0 1 1 0 0 0 0
0 1 1 0 1 1 0 0 0
0 0 0 1 0 1 0 0 1
1 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0
1 0 0 0 1 0 0 0 0
输出:
1 2 4 3 5 6 9 7 8
结果:

浙公网安备 33010602011771号