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 |
哈哈,和我一样的问题,queue忘了清空!In Reply To:求数据丫,大牛帮帮哈!实在想不出wa在那里了 Posted by:774550615 at 2012-08-06 16:38:38 > 这是我的代码: > #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