| ||||||||||
| 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 | |||||||||
C++ AC,G++ WA,why?#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
#define MAXN 202
class point
{
public:
int x,y;
point(){}
point(int y,int x):y(y),x(x){}
};
int N,M,d[3][2]={{-1,0},{1,0},{0,1}};
int m[MAXN][MAXN],vst[MAXN][MAXN];
int bfs(int i)
{
queue<point> q;
point tmp(1,i);
q.push(tmp);
vst[1][i]=1;
while(q.size())
{
point u=q.front();
q.pop();
for(int k=0;k<3;k++)
{
tmp.x=u.x+d[k][0];
tmp.y=u.y+d[k][1];
if(tmp.x>M or tmp.x<1) continue;
if(tmp.y>N or tmp.y<1) continue;
if(vst[tmp.y][tmp.x] or m[tmp.y][tmp.x]==0) continue;
vst[tmp.y][tmp.x]=vst[u.y][u.x]+1;
if(tmp.y==N) return vst[tmp.y][tmp.x];
q.push(tmp);
}
}
}
int main()
{
while(cin>>N>>M,N|M)
{
char ch;
memset(m,0,sizeof(m));
for(int i=N;i>=1;i--) for(int j=1;j<=M;j++)
{
while((ch=getchar())!='W' and ch!='S' and ch!='B');
if(ch=='S')
{
m[i][j]=1;
if((i==1 or i==N) and j<M-1) m[i][j+1]=1;
else if(i>1 and i<N and j<M) m[i][j+1]=1;
}
}
int ans=9999999;
for(int i=1;i<=M;i++) if(m[1][i])
{
memset(vst,0,sizeof(vst));
ans=min(bfs(i),ans);
}
cout<<ans<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator