您的位置:首页 > 其它

poj 1979 zoj 2165 Red and Black

2011-08-19 18:35 543 查看
/*
广搜
很不幸的是以下代码在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

;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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: