标签:now int Deposits char Oil && include 105
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; }
标签:now,int,Deposits,char,Oil,&&,include,105 来源: https://blog.51cto.com/u_13696685/2989022
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。