uva572--oil deposits--dfs算法
2017-07-26 10:17
429 查看
题意:对于给出的矩阵,求独立油田的个数。其中@代表油田,独立的意思是其上下左右以及对角线都没有油田,若有的话就视为同一个。
思路:
dfs,分别向八个方向搜索,同时进行标记,最后输出标记的个数即可。
#include<iostream>
#include<cstring>
using namespace std;
char a[105][105];
int biao[105][105];
int co,m,n;
void dfs(int y,int x,int id){
if(y<0||x<0||y>=m||x>=n||a[y][x]!='@')
return;
if(biao[y][x]>0)
return;
biao[y][x]=id;
for(int dm=-1;dm<=1;dm++)
for(int dn=-1;dn<=1;dn++)
if(dm!=0||dn!=0) dfs(y+dm,x+dn,id);
}
int main(){
while(scanf("%d %d",&m,&n)&&m&&n){
memset(biao,0,sizeof(biao));
co=0;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(biao[i][j]==0&&a[i][j]=='@')
dfs(i,j,++co);
cout<<co<<endl;
}
return 0;
}
思路:
dfs,分别向八个方向搜索,同时进行标记,最后输出标记的个数即可。
#include<iostream>
#include<cstring>
using namespace std;
char a[105][105];
int biao[105][105];
int co,m,n;
void dfs(int y,int x,int id){
if(y<0||x<0||y>=m||x>=n||a[y][x]!='@')
return;
if(biao[y][x]>0)
return;
biao[y][x]=id;
for(int dm=-1;dm<=1;dm++)
for(int dn=-1;dn<=1;dn++)
if(dm!=0||dn!=0) dfs(y+dm,x+dn,id);
}
int main(){
while(scanf("%d %d",&m,&n)&&m&&n){
memset(biao,0,sizeof(biao));
co=0;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(biao[i][j]==0&&a[i][j]=='@')
dfs(i,j,++co);
cout<<co<<endl;
}
return 0;
}
相关文章推荐
- UVA - 572 - Oil Deposits (图的DFS!)
- [uva-572]Oil Deposits (BFS和DFS两种
- UVA 572 - Oil Deposits(简单DFS)
- UVA572 Oil Deposits dfs
- uva 572 Oil Deposits(油田)—— DFS
- UVa - 572 Oil Deposits ( DFS求连通块 )
- UVA - 572 Oil Deposits(DFS和BFS两种解法)
- uva 572 Oil Deposits(DFS遍历图)
- Uva572-poj-1562-hdoj--1241--oil Deposits-DFS
- UVa 572 Oil Deposits(DFS)
- UVA 572 Oil Deposits (DFS)
- 经典第六章 例题 6-12 UVA 572 Oil Deposits(用DFS求连通块)
- UVa 572/POJ 1562/HDU 1241 Oil Deposits(DFS,两种写法)
- Uva 572 - Oil Deposits(DFS)
- UVA 572 - Oil Deposits(DFS)
- UVa 572 - Oil Deposits【图DFS】
- UVa - 572 - Oil Deposits(dfs求连通块)
- UVa 572 Oil Deposits(DFS求8连通块)
- 用DFS求连通块(油田Oil Deposits,UVa 572)
- HDU 1241/UVa572 Oil Deposits(DFS&BFS)