广度优先搜索应用一:着色法
来源:互联网 发布:电脑网络延迟高 编辑:程序博客网 时间:2024/05/01 23:52
在数字图像处理中,可以将一幅图像抽象为一个矩阵,为了方便,在这个例子中只使用0~9这几个数字,进一步抽象,可以把这些数字表示为地图上的海拔高度,0表示海平面,1~9都表示陆地,数字的大小表示海拔的高低。假设初始点在(6,4)处,现在需要计算出该点周围有多少个非0的格子,即该岛的面积。这里把初始点相邻的陆地是为一个岛。
其实就是从(6,4)开始广度优先搜索。每次需要向上下左右四个方向扩展,当扩展出的点大于0时就加入队列,直到队列扩展完毕,所有被加入队列的点的小岛数就是岛的面积。假设图的大小不超过100*100。
int n = 100, m = 100;//假设地图大小不超过100*100 int p = 89, q = 64;//终点 struct note que[10001];//大小根据需要定义,这里我们假设地图大小不超过100*100 int head, tail; int maze[100][100] = { 0 };//存储地图 int mark[100][100] = { 0 };//记录哪些点已经在队列中了,防止一个点被重复扩展 //定义一个用于表示走的方向的数组 int next[4][2] = { { 0, 1 },//向右走 { 1, 0 },//向下走 { 0, -1 },//向左走 { -1, 0 },//向上走 }; int k, flag,tx,ty; int sum = 1;//记录岛屿的大小,初始为1 //队列初始化 head = 1; tail = 1; //第一步是把(1,1)加入队列,并标记(1,1)已经走过 que[tail].x = 1; que[tail].y = 1; que[tail].s = 0; ++tail; mark[1][1] = 1; flag = 0;//用来标记是否到达目标点,0表示暂时还没到达,1表示到达 while (head < tail){ //枚举四个方向 for (k = 0; k < 3; ++k){ //计算下一个点的坐标 tx = que[head].x + next[k][0]; ty = que[head].y + next[k][1]; //判断是否越界 if (tx<1 || tx>n || ty<1 || ty>m) continue; //判断是否是障碍物或者已经在路径中 if (maze[tx][ty] >0 && mark[tx][ty] == 0){ //把这个点标记为已经走过 mark[tx][ty] = 1; //把走过的点算如岛屿的面积 ++sum; que[tail].x = tx; que[tail].y = ty; que[tail].s = que[head].s + 1;//步数是前面一步的步数加1 ++tail; } //如果到了目标点,停止扩展,任务结束,退出循环 if (tx == p&&ty == q){ flag = 1; break; } } if (flag == 1) break; head++; }
0 0
- 广度优先搜索应用一:着色法
- 广度优先搜索法
- 双向广度优先搜索法。
- 双向广度优先搜索法
- 深度优先搜索和广度优先搜索法
- 广度优先搜索算法
- 双向广度优先搜索
- pku2251(广度优先搜索)
- POJ1184Clerver_Writer:广度优先搜索
- Java广度优先搜索
- [AI]广度优先搜索
- 广度优先搜索-BFS
- 广度优先搜索算法
- 广度优先搜索算法
- BFS广度优先搜索
- 广度优先搜索 BFS
- 广度优先搜索
- [ 算法 ]广度优先搜索!
- 实验五:分析system_call中断处理过程
- Android官方开发文档Training系列课程中文版:添加ActionBar之自定义ActionBar样式
- vs2012安装opencv3.0
- Eclipse安装SVN教程
- eclipse转AndroidStudio
- 广度优先搜索应用一:着色法
- 一篇很全面的freemarker教程
- Android自定义控件系列案例【一】
- 基于Spring +Apache POI 导入 ajaxSubmit提交方式导入excel
- as3 时间
- 浅谈PHP类与对象
- 从数据库中导出所有的存储过程的4种方法
- c:if+EL表达式实现新增/编辑共用一个页面
- zookeeper