1 条题解
-
0
C :
#include<stdio.h> int m,n; short tab[101][101]; const int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; void check(int a,int b){ tab[a][b] = 0; int i,x,y; for(i = 0;i < 4;i++){ x = a + dir[i][0]; y = b + dir[i][1]; if(x >=0 && x < m && y >= 0 && y < n && tab[x][y]){ check(x,y); } } } int main(){ //freopen("a.txt","r",stdin); int T,count,i,j; scanf("%d",&T); while(T--){ count = 0; scanf("%d%d",&m,&n); for(i = 0;i < m;i++) for(j = 0;j < n;j++){ scanf("%hd",&tab[i][j]); } for(i = 0;i < m;i++) for(j = 0;j < n;j++) if(tab[i][j]){ check(i,j); count++; } printf("%d\n",count); } return 0; }
C++ :
/** dfs深度搜索 **/ #include<iostream> #include<cstring> using namespace std; int a[101][101],vis[101][101]; void dfs(int x,int y){ if(!a[x][y]||vis[x][y]) return;//已访问或不是水池(a[x][y]==0) vis[x][y]=1;//已访问过 /**搜素上下左右四个方向**/ dfs(x-1,y);//搜素上面 dfs(x+1,y);//搜素下面 dfs(x,y-1);//搜素左面 dfs(x,y+1);//搜素右面 } int main() { int m,n,t; cin>>t; while(t--){ cin>>m>>n; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; int count=0; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ if(!vis[i][j]&&a[i][j]){//if(有水池)&没有被访问 count++; dfs(i,j); } } } cout<<count<<endl; } return 0; }
- 1
信息
- ID
- 1326
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者