POJ 1376 Robot(BFS)
2016-08-24 17:26
337 查看
用A*写了一天,没写出来,没办法只能写BFS了。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; struct node{ int x,y,t,dir; }; const int maxn=100; int vis[maxn][maxn][4]; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; int n,m; int map[maxn][maxn]; int s1,s2,e1,e2; int getdir(char ch) { if(ch=='n') return 0; else if(ch=='e') return 1; else if(ch=='s') return 2; else return 3; } void bfs(node s) { if(s.x==e1&&s.y==e2) {printf("0\n"); return ;} memset(vis,0,sizeof(vis)); vis[s.x][s.y][s.dir]=1; queue<node> q; q.push(s); while(!q.empty()) { node p=q.front(); q.pop(); if(p.x==e1&&p.y==e2) {printf("%d\n",p.t); return ;} for(int i=1;i<=3;i++) { int x=p.x+dx[p.dir]*i; int y=p.y+dy[p.dir]*i; if(map[x][y]||x<=0||y<=0||x>=n||y>=m) break; if(vis[x][y][p.dir]) continue; vis[x][y][p.dir]=1; node k; k.x=x;k.y=y; k.t=p.t+1; k.dir=p.dir; q.push(k); } node k; k.x=p.x;k.y=p.y; k.dir=(p.dir+4-1)%4; k.t=p.t+1; if(!vis[k.x][k.y][k.dir]){ vis[k.x][k.y][k.dir]=1; q.push(k); } k.dir=(p.dir+1)%4; if(!vis[k.x][k.y][k.dir]){ vis[k.x][k.y][k.dir]=1; q.push(k); } } printf("-1\n"); } int main() { while(scanf("%d%d",&n,&m)&&(n+m)) { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&map[i][j]); if(map[i][j]==1) { map[i-1][j]=map[i][j-1]=map[i-1][j-1]=1; } } } char cmd[10]; scanf("%d%d%d%d",&s1,&s2,&e1,&e2); scanf("%s",cmd); node s; s.x=s1,s.y=s2; s.t=0; s.dir=getdir(cmd[0]); bfs(s); } return 0; }
相关文章推荐
- poj 1729 Jack and Jill 1376 Robot 1324 Holedox Moving 1475 Pushing Boxes bfs + a*
- poj 1376 Robot BFS 块状的
- poj 1376 Robot (BFS)
- 总结自己应用广度优先搜索(BFS)中的错误(记POJ 1376 Robot结题过程)
- POJ 1376 Robot (BFS)
- poj 1376 Robot(bfs)
- POJ 1376-Robot(bfs广度优先搜索)
- POJ-1376-Robot
- POJ 1376 Robot
- poj 1376 Robot
- POJ - 1376 Robot
- poj1376 搜索(BFS)
- 1130 POJ#1376 Robot
- 1.12 POJ 1376 Robot
- poj 1376 uva 314 Robot
- POJ 1376 Robot
- poj 2688 Cleaning Robot BFS+DFS(TSP问题)
- POJ 1376 Robot A* -
- poj 1376 bfs
- POJ1376-Robot(广度优先搜索)