nyoj 水池数目(DFS)
2016-12-01 08:46
127 查看
[align=center]水池数目[/align]
南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池。
每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入接下来的m行每行输入n个数,表示此处有水还是没水(1表示此处是水池,0表示此处是地面)
要注意,每个水池的旁边(上下左右四个位置)如果还是水池的话的话,它们可以看做是同一个水池。
代码2:
[align=left]
[/align]
南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池。
Input
第一行输入一个整数N,表示共有N组测试数据每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入接下来的m行每行输入n个数,表示此处有水还是没水(1表示此处是水池,0表示此处是地面)
Output
输出该地图中水池的个数。要注意,每个水池的旁边(上下左右四个位置)如果还是水池的话的话,它们可以看做是同一个水池。
Sample Input
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
Sample Output
2 3
代码1:
#include<stdio.h> #include<string.h> int a[101][101],n,vis[101][101],m;//开两个数组同时搜索,时间少,但消耗内存大 void dfs(int i,int j)//记忆化搜索 { if(a[i+1][j]&&!vis[i+1][j]) { vis[i+1][j]=1; dfs(i+1,j); } if(a[i-1][j]&&!vis[i-1][j]) { vis[i-1][j]=1; dfs(i-1,j); } if(a[i][j+1]&&!vis[i][j+1]) { vis[i][j+1]=1; dfs(i,j+1); } if(a[i][j-1]&&!vis[i][j-1]) { vis[i][j-1]=1; dfs(i,j-1); } } int main() { int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); int i,j,sum=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&a[i][j]); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(a[i][j]&&!vis[i][j]) { sum++; vis[i][j]=1; dfs(i,j); } } printf("%d\n",sum); } return 0; }
代码2:
[align=left]
[/align]
#include<stdio.h> #include<string.h> int a[101][101],n,m; int search(int i,int j)//记忆化搜索 { if(a[i-1][j]){a[i-1][j]=0;search(i-1,j);} if(a[i+1][j]){a[i+1][j]=0;search(i+1,j);} if(a[i][j-1]){a[i][j-1]=0;search(i,j-1);} if(a[i][j+1]){a[i][j+1]=0;search(i,j+1);} } int main() { int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); int i,j,sum=0; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&a[i][j]); for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j]) { sum++; a[i][j]=0; search(i,j); } printf("%d\n",sum); } return 0; }
相关文章推荐
- nyoj 水池数目(DFS)
- NYOJ - 水池数目(DFS)
- nyoj27 水池数目(dfs)
- nyoj 水池数目(DFS)
- ACM--DFS--nyoj 27--水池数目
- nyoj 水池数目(DFS)
- nyoj 水池数目(DFS)
- DFS——NYOJ 27 水池数目
- nyoj--27--水池数目(dfs)
- nyoj27-水池数目 (求连通块数目)【dfs】
- NYOJ 27 水池数目 【DFS】
- NYOJ 27水池的数目——简单的DFS
- nyoj 水池数目(DFS)
- NYOJ27水池数目(dfs)
- NYoj-27-水池数目-DFS-BFS
- 【NYOJ 27 水池数目 DFS】
- NYOJ 27 水池数目(DFS)
- nyoj 水池数目(DFS)
- nyoj27水池数目 (DFS)
- nyoj--27--水池数目(dfs)