图的深度优先搜索
来源:互联网 发布:java贵美商城 编辑:程序博客网 时间:2024/05/18 08:35
Problem Description
已知用邻接矩阵A形式表示的无向图G,满足:
如果图G中存在边(vi,vj),则A[i][j]=1,否则A[i][j]=0。
顶点编号从1到n,从1号顶点开始以深度优先遍历方式输出图G中的每个顶点(有多个邻接点时按照序号从小到大顺序访问),对于非连通图按照顶点编号顺序选择下一个未遍历顶点继深度优先遍历。
如果图G中存在边(vi,vj),则A[i][j]=1,否则A[i][j]=0。
顶点编号从1到n,从1号顶点开始以深度优先遍历方式输出图G中的每个顶点(有多个邻接点时按照序号从小到大顺序访问),对于非连通图按照顶点编号顺序选择下一个未遍历顶点继深度优先遍历。
Input
按行排列的邻接矩阵A,矩阵每行元素占用一行,元素间用一个空格间隔,相邻矩阵间用一个空行间隔,处理到文件结束位置为止。
Output
从1号顶点开始按照深度优先遍历顺序输出图G中的每个顶点,顶点编号间用一个空格间隔,每个无向图的输出占用一行。
Sample Input
0 1 1 0 01 0 0 0 11 0 0 1 10 0 1 0 10 1 1 1 00 1 1 11 0 0 01 0 0 11 0 1 0
Sample Output
1 2 5 3 41 2 3 4
#include<stdio.h>#include<string.h>int lin[100][100];int flag[1000];int a;void dfs(int s){ int i; if(flag[s]==0){ printf(" %d",s); flag[s]=1; } for(i=1;i<=a;i++){ if(lin[s][i]==1){ if(flag[i]==0){ printf(" %d",i); flag[i]=1; dfs(i); } } }}int main(){ int i,j; while(1){ memset(flag,0,sizeof(flag)); for(i=1;i<100;i++){ scanf("%d",&lin[1][i]); if(getchar()=='\n'){ a=i; break; } } for(i=2;i<=a;i++){ for(j=1;j<=a;j++){ scanf("%d",&lin[i][j]); } } printf("1"); flag[1]=1; for(i=1;i<=a;i++){ dfs(i); } printf("\n"); if( getchar()=='\n' )continue;else break; } return 0;}
阅读全文
0 0
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索和广度优先搜索模板
- 图的深度优先搜索与广度优先搜索
- 图的广度优先搜索和深度优先搜索
- PhpStorm+Xampp+Xdebug搭建环境并部署应用
- EasyUI的DataGrid绑定Json数据源
- Python学习笔记
- Android开发圆形头像
- 【Scikit-Learn 中文文档】监督学习:从高维观察预测输出变量
- 图的深度优先搜索
- docker之常用命令整理
- VMware虚拟机增加磁盘空间的扩容操作
- Spark:Java实现Top N
- RxJava源码分析(一)
- python中with as 用法
- 带你逐步深入了解SSH框架——struts2拦截器
- java 构造方法,static关键字,main方法修饰解释
- Java并发学习(十七)-并发工具CountDownLatch