hdu 1241:Oil Deposits
2014-03-06 22:43
274 查看
一道bfs的题。背景为石油探测。一个矩阵,以‘@’代表石油,以‘*’代表岩石,求有几块相连的油田,其中对角相连也算作相连。
记录地图同时用sum记录‘@’的数量。用bfs搜索‘@’,用total计算油田数。每调用一次bfs,油田数total加1。bfs中每搜索到一个‘@’,sum便减1。最后输出total。其实sum没有什么用处,不过不影响代码,存在着可以变得更加严密一点,也就不删除了。
记录地图同时用sum记录‘@’的数量。用bfs搜索‘@’,用total计算油田数。每调用一次bfs,油田数total加1。bfs中每搜索到一个‘@’,sum便减1。最后输出total。其实sum没有什么用处,不过不影响代码,存在着可以变得更加严密一点,也就不删除了。
#include <cstdio> #include <cstring> #include <queue> #include <iostream> using namespace std; typedef struct address{ int x,y; }ad; const int MAXN=110; bool map[MAXN][MAXN]={0}; int sum; queue <ad> p; void bfs(int m,int n){ while(!p.empty()){ ad a;a=p.front();p.pop(); ad b; if(a.x-1>=0 && a.y-1>=0 && map[a.x-1][a.y-1]){ b.x=a.x-1;b.y=a.y-1; p.push(b);sum--;map[b.x][b.y]=0; } if(a.x-1>=0 && map[a.x-1][a.y]){ b.x=a.x-1;b.y=a.y; p.push(b);sum--;map[b.x][b.y]=0; } if(a.x-1>=0 && a.y+1<n && map[a.x-1][a.y+1]){ b.x=a.x-1;b.y=a.y+1; p.push(b);sum--;map[b.x][b.y]=0; } if(a.y-1>=0 && map[a.x][a.y-1]){ b.x=a.x;b.y=a.y-1; p.push(b);sum--;map[b.x][b.y]=0; } if(a.y+1<n && map[a.x][a.y+1]){ b.x=a.x;b.y=a.y+1; p.push(b);sum--;map[b.x][b.y]=0; } if(a.x+1<m && a.y-1>=0 && map[a.x+1][a.y-1]){ b.x=a.x+1;b.y=a.y-1; p.push(b);sum--;map[b.x][b.y]=0; } if(a.x+1<m && map[a.x+1][a.y]){ b.x=a.x+1;b.y=a.y; p.push(b);sum--;map[b.x][b.y]=0; } if(a.x+1<m && a.y+1<n && map[a.x+1][a.y+1]){ b.x=a.x+1;b.y=a.y+1; p.push(b);sum--;map[b.x][b.y]=0; } } } int main(){ int m,n; while(cin>>m>>n){ if(!m && !n) break; int i,j; int total=0; sum=0; memset(map,0,sizeof(map)); for(i=0;i<m;i++){ for(j=0;j<n;j++){ char plot;cin>>plot; if(plot=='@') {map[i][j]=1;sum++;} } } for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(map[i][j]){ ad b;b.x=i;b.y=j;p.push(b); map[i][j]=0;sum--; total++;bfs(m,n); } } } cout<<total<<endl; } return 0; }
相关文章推荐
- hdu-1241-Oil Deposits(dfs水)
- HDU 1241 Oil Deposits (DFS/BFS)
- hdu 1241 Oil Deposits(八方向简单深搜,对新手挺经典)
- hdu 1241 Oil Deposits 解题报告
- HDU 1241 BFS-Oil Deposits
- HDU-1241 Oil Deposits 【dfs】
- hdu 1241 Oil Deposits
- HDU1241 Oil Deposits DFS
- hdu 1241 Oil Deposits
- HDU 1241 Oil Deposits(DFS模板题)
- 杭电(hdu)1241 Oil Deposits
- hdu 1241 Oil Deposits (dfs)
- HDU1241_Oil Deposits(BFS)+(DFS)
- 文章标题 HDU 1241 : Oil Deposits (BFS)
- HDU 1241:Oil Deposits(BFS)
- hdu 1241 Oil Deposits
- hdu 1241 Oil Deposits
- HDOJ/HDU 1241 Oil Deposits(经典DFS)
- hdu 1241 Oil Deposits <java>
- hdu 1241 Oil Deposits