宝岛探险深度优先搜索(着色法)
来源:互联网 发布:手机网络劫持 编辑:程序博客网 时间:2024/05/16 09:09
写这一篇是为了上篇《ycb惹女朋友生气了》,上篇用到了着色法,下面主要介绍一下什么是用深度优先搜索实现的着色法
1.
求从起点开始连接的一整块陆地的面积,即从起点出发向四周搜索,每搜到一块陆地就加一,直到周围全是海洋,并且对陆地进行染色,即标记上负数的数字。
#include<stdio.h>#include<string.h>#include<math.h>#include<queue>using namespace std;int ch[100][100];///地图int book[100][100];///标记int n,m;///地图的行和列int start,finish;///开始位置和终止位置int sum;///记录陆地的面积int dir[4][2]={1,0,0,-1,-1,0,0,1};void dfs(int x,int y,int color){ ch[x][y]=color; int tx,ty; for(int i=0;i<4;i++) { tx=x+dir[i][0]; ty=y+dir[i][1]; if(tx<0||tx>n-1||ty<0||ty>m-1) continue; if(book[tx][ty]==0&&ch[tx][ty]>0) { book[tx][ty]=1; dfs(tx,ty,color); } }}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&ch[i][j]); } } sum=1; book[start][finish]=1;///这个点走过,避免重复记录。 dfs(start,finish,-1); printf("%d\n",sum);}2.如果想直到一个地图中有多少个独立的小岛,怎么做呢?
简单,只需要进行深搜,对每块陆地进行染色,就知道了,看代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<queue>using namespace std;int ch[100][100];///地图int book[100][100];///标记int n,m;///地图的行和列int start,finish;///开始位置和终止位置int sum;///记录陆地的面积int dir[4][2]={1,0,0,-1,-1,0,0,1};void dfs(int x,int y,int color){ ch[x][y]=color; int tx,ty; for(int i=0;i<4;i++) { tx=x+dir[i][0]; ty=y+dir[i][1]; if(tx<0||tx>n-1||ty<0||ty>m-1) continue; if(book[tx][ty]==0&&ch[tx][ty]>0) { book[tx][ty]=1; dfs(tx,ty,color); } }}int main(){ int num=0; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&ch[i][j]); } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(ch[i][j]>0) { num--; book[i][j]=1; dfs(i,j,num); } } } printf("%d\n",-num);///小岛的个数,在上面两层循环中调用了多少次dfs,就有多少num。}
阅读全文
0 0
- 宝岛探险深度优先搜索(着色法)
- 宝岛探险--着色法
- 宝岛探险 深度优先—C
- 广度优先搜索之宝岛探险
- 4.5.4宝岛探险//着色法2
- 4.5.3宝岛探险//DFSearch(又称着色法)
- 宝岛探险1(BFS)
- 宝岛探险1(DFS)
- 宝岛探险
- 宝岛探险
- 宝岛探险
- tianchai 12035 宝岛探险 (BFS)
- 啊哈算法搜索应用之宝岛探险(BFS和DFS)
- 回溯--深度优先搜索(图的M着色问题 poj1129)
- 宝岛探险2
- 宝岛探险 BFS DFS
- 广度优先搜索应用一:着色法
- 回溯法--深度优先搜索
- 【10.7】c++ primer plus 课后编程答案
- 约瑟夫环问题(二):(难度:2颗星)
- Java数组创建
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx
- POJ 1738 An old Stone Game 笔记
- 宝岛探险深度优先搜索(着色法)
- mysql5.7修改密码ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- Longest Palindromic Subsequence
- 设计模式
- 程序员金典编程题2
- 【11.1】c++ primer plus 课后编程答案
- java swing 记事本
- Image转BufferedImage并提取像素进行颜色空间转换
- c++标准输入流