| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
2157谁能帮我看一下啊,谢谢大牛们,做了老长时间了#include<iostream.h>
struct node
{
int x,y;
}start[420],door[5];
int mark[25][25],temp[25][25];
int move[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
int i,j,h,w,ex,ey,key[5],sum[5],f,xx,yy,flag,tang,sx,sy;
char ch,map[25][25];
void input()
{
int i,j;
tang=0;
for(i=0;i<5;i++)
{
key[i]=0;
sum[i]=0;
}
for(i=0;i<25;i++)
{
for(j=0;j<25;j++)
{
temp[i][j]=mark[i][j]=1;
}
}
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
cin>>ch;
map[i][j]=ch;
if(ch=='S')
{
start[0].x=i;
start[0].y=j;
}
if(ch>='a'&&ch<='e')
{
key[ch-'a']++;
temp[i][j]=mark[i][j]=0;
}
if(ch>='A'&&ch<='E')
{
tang++;
door[ch-'A'].x=i;
door[ch-'A'].y=j;
}
if(ch=='G')
{
ex=i;
ey=j;
temp[i][j]=mark[i][j]=0;
}
if(ch=='.')
{
temp[i][j]=mark[i][j]=0;
}
}
}
}
void bfs(int s,int t)
{
while(s<=t)
{
f=t;
while(s<=f)
{
for(int i=0;i<4;i++)
{
xx=start[s].x+move[i][0];
yy=start[s].y+move[i][1];
if(mark[xx][yy]==0)
{
if(map[xx][yy]>='a'&&map[xx][yy]<='e')
{
sum[map[xx][yy]-'a']++;
}
t++;
start[t].x=xx;
start[t].y=yy;
mark[xx][yy]=1;
}
}
s++;
}
}
}
void bfs2(int s,int t)
{
while(s<=t)
{
f=t;
while(s<=f)
{
for(int i=0;i<4;i++)
{
xx=start[s].x+move[i][0];
yy=start[s].y+move[i][1];
if(mark[xx][yy]==0)
{
t++;
start[t].x=xx;
start[t].y=yy;
mark[xx][yy]=1;
if((xx==ex)&&(yy==ey))
{
flag=1;
return;
}
}
}
s++;
}
}
}
void huifu()
{
int i,j;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
mark[i][j]=temp[i][j];
}
}
}
void check()
{
int i;
for(i=0;i<5;i++)
{
if((sum[i]==key[i])&&(sum[i]!=0)&&(sum[j]!=0))
{
// cout<<char('a'+i)<<":"<<sum[i]<<endl;
temp[door[i].x][door[i].y]=0;
mark[door[i].x][door[i].y]=0;
}
}
for(i=0;i<5;i++)
{
sum[i]=0;
}
}
int main()
{
cin>>h>>w;
while(h!=0&&w!=0)
{
flag=0;
input();
for(int iii=0;iii<tang;iii++)
{
bfs(0,0);
huifu();
check();
}
bfs2(0,0);
if(flag==1)
{
cout<<"YES"<<endl;
flag=0;
}
else
{
cout<<"NO"<<endl;
}
cin>>h>>w;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator