hdu 1241 Oil Deposits DFS

来源:互联网 发布:火车票造假图片软件 编辑:程序博客网 时间:2024/06/06 19:30

传送门

http://acm.hdu.edu.cn/showproblem.php?pid=1241


题意是让你找有几块油田(一块油田的意义是许多相邻的@区域形成的大的区域),然后八个方向以内都算相连。

DFS去找有几块油田。

ps:又cin又printf的可能很丧心病狂,我还在慢慢适应cin cout,习惯一下子改不过来...汗

#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define MAX 105int n,m;char map[MAX][MAX];int vis[MAX][MAX];//标记是否访问过,访问过就不访问了,加快搜索int temp[16]={1,-1,1,0,1,1,-1,-1,-1,0,-1,1,0,1,0,-1};void DFS(int s,int e){if(s<1||s>m||e<1||e>n)return ;if(map[s][e]!='@')return ;if(vis[s][e])return ;for(int i=0;i<16;i+=2){map[s][e]='*';vis[s][e]=1;DFS(s+temp[i],e+temp[i+1]);}}int main(){int i,j,count;while(scanf("%d%d",&m,&n)!=EOF){if(m==0&&n==0)break;count=0;memset(vis,0,sizeof(vis));for(i=1;i<=m;i++){getchar();//吃掉回车for(j=1;j<=n;j++)cin>>map[i][j];}for(i=1;i<=m;i++)for(j=1;j<=n;j++){if(map[i][j]=='@'&&vis[i][j]==0){count++;DFS(i,j);}}printf("%d\n",count);}return 0;} 



0 0
原创粉丝点击