uva 10047 The Monocycle
2013-08-30 20:04
267 查看
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<cmath> using namespace std; #define N 30 char Map ; int n,m; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; struct node{ int x,y; int steps; int dir; int color; bool operator<(node st) const{ return st.steps<steps; } }st; bool vis [4][5]; priority_queue<node> p; bool judge(node b){ if(b.x<0||b.y<0||b.x>=n||b.y>=m) return false; return true; } int bfs(node st){ while(!p.empty()) p.pop(); memset(vis,0,sizeof(vis)); st.dir=0; st.color=0; vis[st.x][st.y][0][0]=1; p.push(st); while(!p.empty()){ node a=p.top(); p.pop(); if(Map[a.x][a.y]=='T'&&a.color==0) return a.steps; for(int i=0;i<4;i++){ node b; if(a.dir!=i){////刚开始一直wrong,在转向之后,直接又走了一步,但这样算是两次操作了,在第一次操作后产生的状态,同样有四种可能,直接走只是一种可能情况。. b.x=a.x; b.y=a.y; int dis=(int)abs(a.dir-i); if(dis==2) b.steps=a.steps+2; else b.steps=a.steps+1; b.dir=i; b.color=a.color; } else { b.x=a.x+dx[i]; b.y=a.y+dy[i]; b.steps=a.steps+1; b.color=(a.color+1)%5; b.dir=a.dir; } if(!judge(b)) continue; if(Map[b.x][b.y]=='#') continue; if(vis[b.x][b.y][b.dir][b.color]) continue; vis[b.x][b.y][b.dir][b.color]=1; p.push(b); } } return -1; } int main(){ int f=1; while(scanf("%d%d",&n,&m)!=EOF){ if(!n&&!m) break; for(int i=0;i<n;i++){ scanf("%s",Map[i]); for(int j=0;j<m;j++){ if(Map[i][j]=='S'){ st.x=i; st.y=j; st.steps=0; } } } if(f!=1) puts(""); int result=bfs(st); printf("Case #%d\n",f++); if(result==-1) printf("destination not reachable\n"); else printf("minimum time = %d sec\n",result); //puts(""); } return 0; }
相关文章推荐
- UVA-10047 The Monocycle (图的BFS遍历)
- UVA 10047 The Monocycle (状态记录广搜)
- UVA 10047 The Monocycle(BFS)
- uva 10047 - The Monocycle
- UVa:10047 The Monocycle
- UVA 10047 The Monocycle
- UVa 10047 - The Monocycle
- UVA 10047 The Monocycle (bfs)
- UVa 10047 - The Monocycle
- uva 10047 - The Monocycle(Bfs)
- UVA 10047 The Monocycle
- uva 10047 The Monocycle
- UVA 10047.The Monocycle(广搜)
- UVA 10047--The Monocycle
- UVa - 10047 The Monocycle 独轮车 多状态BFS 重庆一中高2018级竞赛班第十一次测试 2016.9.24 Problem 4
- uva 10047 The Monocycle (BFS)
- UVA 10047.The Monocycle(广搜)
- UVA 10047 - The Monocycle BFS
- UVA 10047 The Monocycle(多状态BFS)
- UVa 10047 - The Monocycle, 优先队列+BFS