深度优先搜索
来源:互联网 发布:知乎 高中生 编辑:程序博客网 时间:2024/06/10 22:34
按深度优先搜索遍历一个连通分支,用邻接矩阵存储。
输入:给出顶点个数,默认是从1到n的,给出边数及相关顶点与距离
输出:按顺序给出访问的顶点
#include<stdio.h>int e[101][101];int book[101]={0};int sum=0,n;void dfs(int cur){ printf("%d ",cur); sum++; if(sum==n) return; int i; for(i=1;i<=n;i++){ if(e[cur][i]==1 && book[i]==0){ book[i]=1; dfs(i); } }}int main(){ //深搜 int i,j; int a,b; int m; //要输入的边数 printf("n: m:\n"); scanf("%d %d",&n,&m); for(i=1;i<=n;i++) //初始化二维矩阵 for(j=1;j<=n;j++){ if(i==j) e[i][j]=0; else e[i][j]=e[j][i]=99999; //规定99999为正无穷 } printf("p1: p2:\n"); for(i=0;i<m;i++){ scanf("%d %d",&a,&b); e[a][b]=e[b][a]=1; } book[1]=1; dfs(1); return 0;}
C++版
#include<iostream>#include<cstring>#include<vector>#include<queue>using namespace std;const int dif = 999999999;int e[101][101];//邻接矩阵int book[101];int sum=0;//记录访问过得顶点数int n;//顶点数int m,v1,v2,d;//边数及边的信息void ini(){ cin >> n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j) e[i][j]=0; else e[i][j]=dif; } } cin >> m; for(int i=0;i<m;i++){ cin >> v1 >> v2 >> d; e[v1][v2]=d; e[v2][v1]=d; }}void dfs(int x){ cout << x << " "; sum++; if(sum==n) return; for(int i=1;i<n;i++){ if(e[x][i]<dif && book[i]==0){ book[i]=1; dfs(i); } }}int main(){ ini(); book[1]=1; dfs(1); return 0;}
阅读全文
1 0
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索 DFS
- 深度优先搜索遍历
- 深度优先搜索 DFS
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- hdoj1015Safecracker(深度优先搜索)
- [AI]深度优先搜索
- 深度优先搜索算法
- DFS 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- 图解深度优先搜索
- 深度优先搜索
- 深度优先搜索
- 深度优先搜索算法
- css背景
- javaweb文件上传的九大问题
- python csv模块使用
- hdu1839 spfa+二分查找
- Spark编程之基本的RDD算子之zip,zipPartitions,zipWithIndex,zipWithUniqueId
- 深度优先搜索
- java中instanceof和isInstance
- C++_Seqlist/Linklist
- POJ3259 解题报告
- 2017ICPCECIC
- 同步、异步、阻塞、非阻塞的理解
- JavaWeb——文件上传和下载.
- 实现一棵二叉树的层序遍历
- 合租分房策略