走迷宫
来源:互联网 发布:经典的破案电视剧 知乎 编辑:程序博客网 时间:2024/05/01 17:52
从起点到终点的最短移动序列,每次只能往上、下、左、右移动到相邻的单元格。任何时候都不能在阻碍格中,也不能走出迷宫之外,此题跟POJ3278有些相似,都是用了BFS
/* *此题的二维迷宫是从上到下,从左到右一次编号的 * 0 3 6 * 1 4 7 * 2 5 8 * 这就是3X3的编号 * */#include<cstdio>#include<cstring>#define MAXN 110int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};int n,m;int vis[MAXN][MAXN],maze[MAXN][MAXN];/*存储当前结点的父结点 起点到当前结点的距离 最后一步移动方向*/int fa[MAXN][MAXN],dist[MAXN][MAXN], last_dir[MAXN][MAXN];//临时队列int q[MAXN*MAXN];void bfs(int x, int y){int front=0, rear=0, d, u;u=x*m+y;vis[x][y] =1;fa[x][y] = u;//初始化起点,起点没有父结点,保存的是自身dist[x][y] = 0;q[rear++] =u;while(front < rear){u = q[front++];x =u/m; y=u%m;for(d =0; d< 4; d++){int nx =x+dx[d], ny = y+dy[d];if(nx>=0 && nx < n && ny>=0 && ny<m && maze[nx][ny] && !vis[nx][ny]){int v = nx*m+ny;q[rear++] = v;vis[nx][ny] = 1;fa[nx][ny] = u;dist[nx][ny] = dist[x][y] +1;last_dir[nx][ny] = d;}}}}int dir[MAXN*MAXN];void print_path(int x, int y){char name[5]={"UDLR"};int c=0;for(;;){int fx = fa[x][y]/m;int fy = fa[x][y]%m;if( fx == x && fy == y)break;dir[c++] = last_dir[x][y];x = fx;y = fy;}while(c--)putchar(name[dir[c]]);putchar('\n');}int main(){while(scanf("%d%d",&n, &m) != EOF){memset(vis, 0, sizeof(vis));for(int i=0; i<n; i++){char s[MAXN];scanf("%s",s);for(int j=0; j<m; j++)maze[i][j] = s[j] - '0';}int x,y;scanf("%d%d", &x, &y);bfs(x,y);scanf("%d%d", &x, &y);print_path(x,y);}return 0;}
0 0
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 集群安装配置Hadoop详细图解
- linux下简单安装insight
- 操作数据库表,并作日志记录。
- 四季豆
- python修改文件名
- 走迷宫
- 时间电话分机阿桑地方
- wifi共享精灵2014最新版 v04.25.001 官方正式版
- iOS常用加密方法(aes、md5、base64)
- 中移动将与17家虚拟运营商签约,牌照最快本月底发放
- git使用一:本地git安装和配置
- 3D图形软引擎开发总结
- How to configure automatic crash dumps in case of application failures
- java 基础:异常处理(六)