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<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int m,n; int map[50][55]; int sign[50][55][4]; int direct[4][2]={{3,1},{0,2},{1,3},{2,0}}; int f[4][3][2]={{{-1,0},{-2,0},{-3,0}},{{0,1},{0,2},{0,3}}, {{1,0},{2,0},{3,0}},{{0,-1},{0,-2},{0,-3}}}; struct node { int xi,xj; int step; int dir; }u,v,w; int si,sj,di,dj; int f2[4][2]={{0,0},{-1,0},{0,-1},{-1,-1}}; void bfs(int e) { int i,j; int x,y; int k; queue<node>q; w.xi=si; w.xj=sj; w.step=0; w.dir=e; sign[si][sj][e]=1; q.push(w); while(!q.empty()) { u=q.front(); q.pop(); //cout<<u.xi<<" "<<u.xj<<" "<<u.dir<<" "<<u.step<<endl; if(u.xi==di&&u.xj==dj) { printf("%d\n",u.step); return ; } bool check; for(i=0;i<3;i++) { check=false; v.xi=u.xi+f[u.dir][i][0]; v.xj=u.xj+f[u.dir][i][1]; v.step=u.step+1; v.dir=u.dir; if(v.xi<=0||v.xi>=m||v.xj<=0||v.xj>=n)break; if(sign[v.xi][v.xj][v.dir])break; if(map[v.xi][v.xj])break; for(j=0;j<4;j++) { x=v.xi+f2[j][0]; y=v.xj+f2[j][1]; if(x<0||x>=m||y<0||y>=n) { check=true; break; } if(map[x][y]) { check=true; break; } } if(check)break; sign[v.xi][v.xj][v.dir]=1; q.push(v); } for(k=0;k<2;k++) { v.xi=u.xi; v.xj=u.xj; v.step=u.step+1; v.dir=direct[u.dir][k]; if(sign[v.xi][v.xj][v.dir])continue; sign[v.xi][v.xj][v.dir]=1; q.push(v); } } printf("-1\n"); } int main() { int i,j; int e; bool foud; while(scanf("%d%d",&m,&n)) { if(m==0&&n==0)break; foud=false; for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&map[i][j]); } } char s[20]; scanf("%d%d%d%d",&si,&sj,&di,&dj); int x,y; for(j=0;j<4;j++) { x=si+f2[j][0]; y=sj+f2[j][1]; if(x<0||x>=m||y<0||y>=n) { foud=true; break; } if(map[x][y]) { foud=true; break; } } scanf("%s",s); if(strcmp(s,"north")==0) e=0; else if(strcmp(s,"east")==0) e=1; else if(strcmp(s,"south")==0) e=2; else if(strcmp(s,"west")==0) e=3; memset(sign,0,sizeof(sign)); if(si==0||si==m||sj==0||sj==n) { foud=true; } if(di==0||di==m||dj==0||dj==n) { foud=true; } if(!foud)bfs(e); 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