标签:
2 3 4 1 0 0 0 0 0 1 1 1 1 1 0 5 5 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1
2 3
搜索真的挺难的 一直看不懂 看了别人的题解.........还有很长的路要走啊!
此题总共要搜索每个水池的四个方向 (上,下,左,右)并将搜索过的位置变为陆地,当四个方位的周围还有水池的话继续搜索并变为陆地
以此类推;则进行多少次搜索函数的调用 就证明有多少个水池
#include<stdio.h> #include<string.h> #define MAX 110 int s[MAX][MAX]; int n,m; void dfs(int x,int y) { if(0<x&&x<=n&&0<y&&y<=m&&s[x][y])//所判断位置是否在此n*m矩阵内,并判断当前位置是否为水池 { //若均满足则执行此搜索 s[x][y]=0;// 将水池标记为陆地 dfs(x-1,y); //上 这四步是将所有的此水池附近的水池都 dfs(x,y-1);//左 标记为陆地 则可知此搜索进行几次 dfs(x+1,y); //下 就有几片水池 dfs(x,y+1);//右 } return ; } int main() { int j,i,sum,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&s[i][j]); } } sum=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(s[i][j]) { dfs(i,j); sum++; } } } printf("%d\n",sum); } return 0; }
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4574347.html