dfs,bfs算法探究
来源:互联网 发布:邮件营销软件 编辑:程序博客网 时间:2024/06/01 07:47
用了点时间,写了dfs算法和bfs算法,节点图片,代码,运行结果如下:
节点图片:
测试数据:
1 2
1 5
2 3
2 4
3 6
4 7
4 8
5 8
5 9
6 10
7 10
8 10
9 10
dfs测试代码如下:
#include <iostream>#include <cstdio>using namespace std;#define MAX 10+1int edge[MAX][MAX];int flag[MAX];/**节点的标示*/void init(){int i,j;int m,n; for(i=1; i<=MAX; i++) { flag[i]=0;/**表示没有被访问过*/ for(j=1; j<=MAX; j++) { edge[i][j]=edge[j][i]=0; } }while(~scanf("%d%d",&m,&n))edge[m][n]=1;}void dfs(int edge[][MAX],int start,int count){int queue[MAX],i=1,pre;queue[1]=start;flag[1]=1;/**先处理第一个节点,表示已经访问过*/while(i>0){pre=queue[i];queue[i]=0;i--;for(int j=1;j<=count;j++){if(edge[pre][j]==1 && flag[j]==0)/**将pre的未被访问的邻接节点放进来*/{queue[++i]=j; flag[j]=1;}} printf("第 %d 个节点;\n",pre);}}int main(){ freopen("input.txt","r",stdin);init();dfs(edge,1,10);/**一共10个节点,以0号节点开始*/return 0;}
dfs测试结果:
bfs的关键代码如下
void bfs(int edge[][MAX],int start,int count){ int left,right; int queue[MAX],pre; left=right=0; queue[++right]=start;flag[start]=1; while(left<right) { pre=queue[++left]; for(int i=1;i<=count;i++) { if(edge[pre][i]==1 && flag[i]==0) { queue[++right] = i; flag[i] = 1; } } printf("第 %d 个节点\n",pre); }}
然后只需要将主函数的调用部分改一改就可以了;
测试结果如下:
0 0
- dfs,bfs算法探究
- BFS和DFS算法
- BFS和DFS算法
- DFS,BFS算法总结
- 算法-DFS和BFS
- 图算法之bfs/dfs
- 基本算法DFS以及BFS
- 【经典算法】:BFS与DFS
- DFS和BFS算法介绍
- 图的BFS,DFS算法
- BFS/DFS引出A*算法
- 基础算法 之 BFS & DFS
- 【算法学习】DFS与BFS
- DFS算法,BFS算法遍历图
- BFS和DFS优先搜索算法
- BFS和DFS优先搜索算法
- BFS和DFS优先搜索算法
- BFS/DFS算法介绍与实现
- C/C++中extern关键字详解
- iOS开发需要熟记的几个关键尺寸
- 运维工具整理
- DW中使用正则表达式删除tppabs冗余代码
- Codeforces Round #274 (Div. 2) C .Exams
- dfs,bfs算法探究
- linux .o a .so .la .lo的区别
- ORCL_PROC
- data转移到非Web目录
- 再谈用java实现Smtp发送邮件之Socket编程
- make menuconfig提示'make menuconfig' requires the ncurses libraries.
- 如果有一本书是你入行几年,偶然读到,发现他写的都是你的血泪史,那么请推荐给我吧
- Dirichlet's Theorem on Arithmetic Progressions (poj 3009 水题)
- 告诉大家。Android 打造任意层级树形控件 考验你的数据结构和设计