关于广度优先搜索的理解
来源:互联网 发布:java mysql 批处理 编辑:程序博客网 时间:2024/05/22 04:35
广度优先搜索是一圈一圈的搜索,直到遍历图,
2 7
3 0 1 5
4 6
从0开始搜索顺序(右下左上):1,4,3,2,5,6,7 利用book数组将已经遍历过的点记录,以后不再遍历,广度优先搜索用的是队列,而深度优先搜索用的是递归.
基本上广度能做的深度也能做
但是:
比较深度优先和广度优先两种搜索法,广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索算法法要快些。
总之,一般情况下,深度优先搜索法占内存少但速度较慢,广度优先搜索算法占内存多但速度较快,在距离和深度成正比的情况下能较快地求出最优解。因此在选择用哪种算法时,要综合考虑。决定取舍。
以下是一个《啊哈!算法》中的一题 P113,寻找独立的小岛.
数据(10行10列):
1 2 1 0 0 0 0 0 2 3
3 0 2 0 1 2 1 0 1 2
4 0 1 0 1 2 3 2 0 1
3 2 0 0 0 1 2 4 0 0
0 0 0 0 0 0 1 5 3 0
0 1 2 1 0 1 5 4 3 0
0 1 2 3 1 3 6 2 1 0
0 0 3 4 8 9 7 5 0 0
0 0 0 3 7 8 5 0 1 2
0 0 0 0 0 0 0 0 1 0
#include <stdio.h>struct node {int x;int y;};struct node que[200]; //队列int sum = 1;//本题无用int Map[11][11]; //地图数据int book[50][50]={0}; //标记数组int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//右下左上int flag =0;//判断是否找到了一个岛找到了置为1,如果为1 num--;int num =-1; //岛屿标号int main(){freopen("test.txt","r",stdin); //重定向int i,j,startx=0,starty=0,head=1,tail=1,tx,ty,k;int n=10,m=10;for(i = 0 ;i<n;i++)for(j=0;j<m;j++)scanf("%d",&Map[i][j]);que[tail].x = startx;que[tail].y = starty;tail++;for(i=0;i<10;i++){for(j=0;j<10;j++) //循环每一个点{que[head].x=i;que[head].y=j;while(head<tail && Map[que[head].x][que[head].y]!=0)//不用找(0,0)的点{for(k=0;k<4;k++) //四个方向{tx = que[head].x+next[k][0]; //得到下一个点ty = que[head].y+next[k][1];if(tx<0||tx>9||ty>9|| Map[tx][ty]==0||ty<0) //为0不往下走,直接判断另一个点continue;if(Map[tx][ty]>0 && Map[tx][ty]<10 && book[tx][ty]==0) //1~9为岛屿 并且判断是否被遍历过,防止重复{//printf("%d,%d\n",tx,ty);book[tx][ty]=1; //标志遍历过que[tail].x = tx; //将队列下一个写入数据que[tail].y = ty;Map[tx][ty]=num; //把同一个岛屿数字更改为numflag =1; //找到了岛屿tail++; //尾++}}head++; //头++,一定要写的.}if(flag == 1){num--; flag=0;}tail++;//一个岛屿找完后,尾++,让循环能够继续.}}for(i=0;i<10;i++) //输出{for(j=0;j<10;j++)printf("%4d",Map[i][j]);printf("\n");}printf("%d\n",-num-1); //输出岛屿个数return 0;}
0 0
- 关于广度优先搜索的理解
- 理解广度优先搜索
- 理解广度优先搜索
- 关于广度优先搜索的判重
- 个人理解广度优先搜索
- 关于图的广度优先搜索算法的思考.
- 广度优先搜索的思想
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 广度优先搜索的实现
- 广度优先搜索的代码
- 图的 广度优先 搜索
- 图的广度优先搜索
- 51Nod-1011-最大公约数GCD
- MATLAB基础1
- httpClient-Post-Get代码
- (array.count - 1 )的坑
- HDU 5157 Harry and magic string
- 关于广度优先搜索的理解
- CF 271 Beautiful Year
- Android 静态广播和动态广播接收顺序
- 数据结构 二叉树
- CSS3的新属性animation
- 学习Android第8天,Asynctask的使用(异步操作)
- 罗易彬:沥青生死尽在多哈会议之全面解析
- POJ 2387 Til the Cows Come Home
- 【实例】爬虫:下载图片