P
来源:互联网 发布:中国音乐软件版权 编辑:程序博客网 时间:2024/04/27 19:34
题意:
题目的意思就是在给出的图中@代表有石油,*代表没有石油,而在一个有石油的地方它的周围8个方向的地方如果也有石油,那么这2块石油是属于一块的,给出图,问图中有几块石油田.
思路:
类似我们课堂上的找药丸那个题,运用深度搜索,寻找符合条件的!详见代码:
#include<cstdio>using namespace std;char a[101][101];bool b[101][101]; //开一个bool数组,进行判断有没有访问过int n,m,i,j,s=0;int dx[8]={0,0,-1,1,-1,1,-1,1};int dy[8]={-1,1,0,0,1,-1,-1,1};//8个方向void f(int,int); //搜索int main(){ while(~scanf("%d%d\n",&n,&m)){s=0;if(n==0&&m==0)break;for (i=0;i<n;i++) gets(a[i]);for (i=0;i<n;i++) for (j=0;j<m;j++) if(a[i][j]=='*')b[i][j]=0; //将b初始化else b[i][j]=1;for (i=0;i<n;i++) for (j=0;j<m;j++) if (b[i][j]) { b[i][j]=0; f(i,j); s++; //符合条件 加一 } printf("%d\n",s); } return 0; }void f(int x,int y){ for (int i=0;i<8;i++) if(x+dx[i]>-1&&x+dx[i]<n&&y+dy[i]>-1&&y+dy[i]<m&&b[x+dx[i]][y+dy[i]]) { b[x+dx[i]][y+dy[i]]=0; f(x+dx[i],y+dy[i]); //对找到的点的8个方向进行判断,并将它们置0 } }
心得:
搜索做起来还是有点吃力,继续刷题
0 0
- p;
- p
- p
- p
- p
- P
- :-P
- p
- p++
- p**
- *p++,(*p)++,*++p,++*p
- *p++, *++p, ++*p, (*p)++
- P
- *p++
- *p++, ++*p, (*p)++, *++p
- P
- *p++ *++p *(p++) *(++p)
- p
- 声明变量
- 单例模式
- CNN反向传播训练参数过程
- python的input()和raw_input()
- No bean named 'beanScope' is defined问题解决
- P
- Android中Edittext监听回车事件
- jQuery基础篇(三)事件
- 能提升自己能力的几个经典项目
- Git命令记录
- (个人)AR电子书系统创新实训第一周(2)
- C# 协变和逆变
- Javascript之原型模式
- 蚂蚁金服新一代数据可视化引擎 G2