POJ 1562 Oil Deposits
Posted slgkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1562 Oil Deposits相关的知识,希望对你有一定的参考价值。
<pre name="code" class="cpp">题目大意:输入一个二维网格。每一个网格单元中仅仅有两种字符‘*‘和‘@‘,‘@‘表示油田。‘*‘表示土地。求出网格中共同拥有多少块油田? 注意:全部横向。竖向。对角线方向连同的油田算一块油田。 算法思想: 广度优先搜索。扫描每个网格。推断该网格是否是油田且未被标记,若是则计数加1而且进行广搜标记全部与其相连通 的油田,若不是则仅仅标记。扫描全然部的网格后输出计数值就可以。 代码例如以下: #include <iostream> #include <cstring> #include <cstdio> using namespace std; int m,n; const int M=105; int color[M][M]; char grid[M][M];//注意为字符数组 void Bfs(int a,int b){ if(color[a][b]==0) return ; else{ color[a][b]=0; if(grid[a][b]==‘*‘) return ; else{ if(a-1>0) Bfs(a-1,b);//上 if(a+1<=m) Bfs(a+1,b);//下 if(b-1>0) Bfs(a,b-1);//左 if(b+1<=n) Bfs(a,b+1);//右 if(a-1>0&&b-1>0) Bfs(a-1,b-1);//左上 if(a-1>0&&b+1<=n) Bfs(a-1,b+1);//右上 if(a+1<=m&&b-1>0) Bfs(a+1,b-1);//左下 if(a+1<=m&&b+1<=n) Bfs(a+1,b+1);//右下 } } } int main(){ while(cin>>m>>n){ if(m==0) break; memset(color,-1,sizeof(color)); int count=0; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>grid[i][j]; } } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ if(color[i][j]==0) continue; else{ if(grid[i][j]==‘*‘){ color[i][j]=0; continue; } else{ count++; Bfs(i,j); } } } } cout<<count<<endl; } return 0; }
以上是关于POJ 1562 Oil Deposits的主要内容,如果未能解决你的问题,请参考以下文章