poj 1979 zoj 2165 Red and Black

poj 1979 zoj 2165 Red and Black

/*
广搜
很不幸的是以下代码在poj和hdu都AC了
在zoj却过不了
先贴出
zoj能过版正在研究中。。。
*/
#define LOCAL
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<iomanip>
#include<string>
#include<algorithm>
#include<ctime>
#include<stack>
#include<queue>
#include<vector>
#define N 25
using namespace std;
class Cordinate
{public:int x,y;};
int main()
{
#ifdef LOCAL
       freopen("input.txt","r",stdin);
       freopen("output.txt","w",stdout);
#endif
 
	   int m,n,ans,i,j,rec[N][N];Cordinate po;char ch;
	   while(cin>>n>>m&&m&&n)
	   {
		   queue<Cordinate>q;
		   for(i=1;i<=m;i++)
			{
				for(j=1;j<=n;j++)
				{
					cin>>ch;
					switch(ch)
					{
						case '.':rec[i][j]=0;break;
						case '#':rec[i][j]=-1;break;
						case '@':rec[i][j]=1;po.x=i;po.y=j;break;
					}
				}
			}
			q.push(po);
			while(!q.empty())
			{
				po=q.front();q.pop();
				if(po.x-1>=0&&rec[po.x-1][po.y]==0){po.x--;rec[po.x][po.y]=1;q.push(po);po.x++;}
				if(po.x+1<=m&&rec[po.x+1][po.y]==0){po.x++;rec[po.x][po.y]=1;q.push(po);po.x--;}
				if(po.y-1>=0&&rec[po.x][po.y-1]==0){po.y--;rec[po.x][po.y]=1;q.push(po);po.y++;}
				if(po.y+1<=n&&rec[po.x][po.y+1]==0){po.y++;rec[po.x][po.y]=1;q.push(po);po.y--;}
			}
			ans=0;
			for(i=1;i<=m;i++)
			{
				for(j=1;j<=n;j++)
				{
					if(rec[i][j]==1) 
						ans++;
				}
			}
			cout<<ans<<endl;
	   }
	   return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注