| ||||||||||
| 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 | |||||||||
已经WA了很多次了,很无语,哪里错了啊?#include <cstdio>
#include <string.h>
#include <queue>
using namespace std;
#define M 400
char map[M][M];
int vis[M][M];
int movex[4]={1,-1,0,0};
int movey[4]={0,0,-1,1};
int n,m;
int ex,ey;
int bfs(int x,int y)
{
queue<int> q;
int i,xx,yy;
q.push(x);
q.push(y);
vis[x][y]=0;
while(!q.empty())
{
x=q.front();
q.pop();
y=q.front();
q.pop();
if(x==ex&&y==ey)
return vis[x][y];
for(i=0;i<4;i++)
{
xx=x+movex[i];
yy=y+movey[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&map[xx][yy]!='S'&&map[xx][yy]!='R')
{
if(map[xx][yy]=='B')
{
if(vis[xx][yy]>vis[x][y]+2)
{
vis[xx][yy]=vis[x][y]+2;
q.push(xx);
q.push(yy);
}
}
else
{
if(vis[xx][yy]>vis[x][y]+1)
{
vis[xx][yy]=vis[x][y]+1;
q.push(xx);
q.push(yy);
}
}
}
}
}
return -1;
}
int main()
{
int i,stx,sty,j,min;
while(scanf("%d%d",&n,&m)!=EOF,n+m)
{
getchar();
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
vis[i][j]=21000000;
scanf("%c",&map[i][j]);
if(map[i][j]=='T')
ex=i,ey=j;
if(map[i][j]=='Y')
stx=i,sty=j;
}
getchar();
}
min=bfs(stx,sty);
if(min!=-1)
printf("%d\n",min);
else
printf("-1\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator