POJ 1979 Red and Black (简单DFS)

 /*
 qq:1239198605
 ctgu_yyf
        */

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
char map[25][25];
int vis[25][25];
int m,n; 
int ans;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};

bool inmap(int x,int y)
{
	if(x>=1&&x<=n&&y>=1&&y<=m)
	return true;
	
	return false;
}

void dfs(int startx,int starty)
{
//	cout<<startx<<starty<<"**"<<endl;
	
	vis[startx][starty]=1;	
	int nx,ny;
   	for(int i=0;i<4;i++)
   	{
   		nx=startx+dir[i][0];
   		ny=starty+dir[i][1];
   		
   		if(inmap(nx,ny)&&map[nx][ny]=='.'&&vis[nx][ny]==0)
   		{
   		  ans++;
		  dfs(nx,ny);
		}
   		
	}
   	
}
int main()
{
   ios::sync_with_stdio(false);
   while(cin>>m>>n)
   {
   	if(m==0&&n==0)
	break;    
   	
   	memset(vis,0,sizeof(vis));
   	ans=1;
   	
   	int startx,starty;
   	for(int i=1;i<=n;i++)
   	for(int j=1;j<=m;j++)
   	{
	   
   	cin>>map[i][j];
   	if(map[i][j]=='@')
   	{
   		startx=i;
   		starty=j;
	}}
   	
   	dfs(startx,starty);
   	
   	cout<<ans<<endl;
   }

return 0;
}

猜你喜欢

转载自blog.csdn.net/k_koris/article/details/81564875