POJ 2386 水洼(深度优先搜索)

#include<iostream>
#define MAX 101
using namespace std;
int N,M;
char map[MAX][MAX];
int num=0;         *//计数* 
int next[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; *//斜着也算连着* 
bool flag=0;
void dfs(int x,int y)
{
    map[x][y]='.';       //将‘W’变为‘.’ 
    	for(int i=0;i<8;i++)
    	{
    		int dx=x+next[i][0];
    		int dy=y+next[i][1];
    		if(dx>=0&&dx<=N-1&&dy>=0&&dy<=M-1&&map[dx][dy]=='W')  *//只要不越界就可以* 
    			dfs(dx,dy);
    	
    	}
    	return ;

}
int main()
{
    scanf("%d %d",&N,&M);     *//输入* 
    	for(int i=0;i<N;i++)   
    	{
    		for(int j=0;j<M;j++)
    		{
    			cin>>map[i][j];       			
    		}
    	}      	
    	*//输出* 
    		for(int i=0;i<N;i++)
    	{
    		for(int j=0;j<M;j++)
    		{
    			if(map[i][j]=='W')
    			{
    				dfs(i,j);
    				num++;
    			}
    		 } 
    	}
    	cout<<num<<endl;
    	return 0;
  }
发布了22 篇原创文章 · 获赞 33 · 访问量 1087

猜你喜欢

转载自blog.csdn.net/qq_42577542/article/details/89109383
今日推荐