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
结果: