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 |
请大牛指点,怎么用广搜做这道题啊?为什么的所有数据(包括discuss上的),可还是不能A啊?#include<iostream> #include<queue> using namespace std; int map[21][21]; int w,h,res; int si,sj,ei,ej; int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//下右上左 struct node { int x,y; int steps; }; node pre; void bfs() { queue<node> que; pre.x=si; pre.y=sj; pre.steps=0; map[pre.x][pre.y]=0; que.push(pre); while(!que.empty()) { pre=que.front(); que.pop(); if(pre.steps>=10) continue; for(int i=0;i<4;i++) { int pi,pj; pi=pre.x+dir[i][0]; pj=pre.y+dir[i][1];//前进一步 bool flog=0; while(pi>=0&&pi<h&&pj>=0&&pj<w&&map[pi][pj]==0) { pi+=dir[i][0]; pj+=dir[i][1]; flog=1; } if(map[pi][pj]==3) { res=pre.steps+1; return ; } if(pi<0||pi>=h||pj<0||pj>=w) continue;//如果越界,则选择其他方向 if(flog==0) continue;//如果第一步是障碍物,则选择其他方向 map[pi][pj]=0; node p; p.x=pi-dir[i][0]; p.y=pj-dir[i][1]; p.steps=pre.steps+1; que.push(p); } } } int main() { int i,j; while(scanf("%d%d",&w,&h)!=EOF&&(w||h)) { for(i=0;i<h;i++) for(j=0;j<w;j++) { scanf("%d",&map[i][j]); if(map[i][j]==2) si=i,sj=j; else if(map[i][j]==3) ei=i,ej=j; } res=-1; bfs(); printf("%d\n",res); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator