Oil Deposits
作者:互联网
Problem Description
Input
Output
Sample Input
题意:'@'代表油袋,'*'代表没有油;油袋相连(水平,垂直,斜对角线相连)的表示一个油藏。问给你一个m*n大小的矩阵有多少个油藏? 1.DFS #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=105; int n,m; char a[N][N]; void dfs(int x,int y) { a[x][y]='*'; for(int i=-1; i<=1; i++) for(int j=-1; j<=1; j++) { int nx=x+i,ny=y+j; if(a[nx][ny]=='@'&&nx>=0&&nx<m&&ny>=0&&ny<n) dfs(nx,ny); } return; } int main() { while(~scanf("%d%d",&m,&n)&&(m||n)) { int i,j,ans=0; for(i=0; i<m; i++) scanf("%s",a[i]); for(i=0; i<m; i++) for(j=0; j<n; j++) { if(a[i][j]=='@') { dfs(i,j); ans++; } } printf("%d\n",ans); } return 0; } #include<cstdio> #include<queue> #include<algorithm> using namespace std; int n,m; char a[105][105]; int dx[]={1,1,1,0,0,-1,-1,-1},dy[]={0,1,-1,-1,1,-1,1,0}; struct node { int xx; int yy; }; void bfs(int x,int y) { node now,next; queue<node>q; now.xx=x; now.yy=y; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); for(int i=0; i<8; i++) { int nx=now.xx+dx[i],ny=now.yy+dy[i]; if(nx>=0&&nx<m&&ny>=0&&ny<n&&a[nx][ny]=='@') { a[nx][ny]='*'; next.xx=nx; next.yy=ny; q.push(next); } } } return; } int main() { while(scanf("%d%d",&m,&n)&&(m||n)) { int i,j,ans=0; for(i=0; i<m; i++) scanf("%s",a[i]); for(i=0; i<m; i++) for(j=0; j<n; j++) { if(a[i][j]=='@') { bfs(i,j); ans++; } } printf("%d\n",ans); } return 0; }
题意:'@'代表油袋,'*'代表没有油;油袋相连(水平,垂直,斜对角线相连)的表示一个油藏。问给你一个m*n大小的矩阵有多少个油藏? 1.DFS #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=105; int n,m; char a[N][N]; void dfs(int x,int y) { a[x][y]='*'; for(int i=-1; i<=1; i++) for(int j=-1; j<=1; j++) { int nx=x+i,ny=y+j; if(a[nx][ny]=='@'&&nx>=0&&nx<m&&ny>=0&&ny<n) dfs(nx,ny); } return; } int main() { while(~scanf("%d%d",&m,&n)&&(m||n)) { int i,j,ans=0; for(i=0; i<m; i++) scanf("%s",a[i]); for(i=0; i<m; i++) for(j=0; j<n; j++) { if(a[i][j]=='@') { dfs(i,j); ans++; } } printf("%d\n",ans); } return 0; } #include<cstdio> #include<queue> #include<algorithm> using namespace std; int n,m; char a[105][105]; int dx[]={1,1,1,0,0,-1,-1,-1},dy[]={0,1,-1,-1,1,-1,1,0}; struct node { int xx; int yy; }; void bfs(int x,int y) { node now,next; queue<node>q; now.xx=x; now.yy=y; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); for(int i=0; i<8; i++) { int nx=now.xx+dx[i],ny=now.yy+dy[i]; if(nx>=0&&nx<m&&ny>=0&&ny<n&&a[nx][ny]=='@') { a[nx][ny]='*'; next.xx=nx; next.yy=ny; q.push(next); } } } return; } int main() { while(scanf("%d%d",&m,&n)&&(m||n)) { int i,j,ans=0; for(i=0; i<m; i++) scanf("%s",a[i]); for(i=0; i<m; i++) for(j=0; j<n; j++) { if(a[i][j]=='@') { bfs(i,j); ans++; } } printf("%d\n",ans); } return 0; }
标签:now,int,Deposits,char,Oil,&&,include,105 来源: https://blog.51cto.com/u_13696685/2989022