本文主要是介绍初学DFS:HDU1241 Oil deposits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这题做了几小时,怪自己粗心
注意题目给出的最后一组数据M后面多了一个空格,不要直接复制,我就是直接复制过来写成文件调试,坑死了
#include <iostream>
#include <cstdio>
#include <cstring>
//#define test
using namespace std;
char vis[105][105];
int cnt;
int M,N;
int dir[8][2] = {{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};
void dfs(int x,int y)
{vis[x][y]='*';//printf("%d %d\n",x,y);int xx,yy;for(int i=0; i<8; i++){xx=x+dir[i][0];yy=y+dir[i][1];if(xx>M||yy>N||xx<1||yy<1||vis[xx][yy]=='*')continue;if(vis[xx][yy]=='@')dfs(xx,yy);}return;
}
int main()
{//fp=fopen("out.txt","w");while(scanf("%d %d",&M,&N)!=EOF){getchar();if(M==0||N==0)break;for(int i=1; i<=M; i++){for(int j=1; j<=N; j++)scanf("%c",&vis[i][j]);getchar();//get the char '\n'}
#ifdef testfor(int i=1; i<=M; i++){for(int j=1; j<=N; j++)printf("%c",vis[i][j]);printf("\n");}
#endifcnt=0;for(int i=1; i<=M; i++)for(int j=1; j<=N; j++)if(vis[i][j]=='@'){cnt++;dfs(i,j);}printf("%d\n",cnt);//memset(vis,0,sizeof(vis));}return 0;
}
这篇关于初学DFS:HDU1241 Oil deposits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!