博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构实习 Problem H 迷宫的最短路径
阅读量:4340 次
发布时间:2019-06-07

本文共 2079 字,大约阅读时间需要 6 分钟。

数据结构实习 Problem H 迷宫的最短路径

题目描述

设计一个算法找一条从迷宫入口到出口的最短路径。

输入

迷宫的行和列m n

迷宫的布局

输出

最短路径

样例输入

6 8

0 1 1 1 0 1 1 1

1 0 1 0 1 0 1 0

0 1 0 0 1 1 1 1

0 1 1 1 0 0 1 1

1 0 0 1 1 0 0 0

0 1 1 0 0 1 1 0

样例输出

(6,8)

(5,7)

(4,6)

(4,5)

(3,4)

(3,3)

(2,2)

(1,1)

代码如下:

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 1000;int dx[] = {1,1,0,-1,-1,-1,0,1};int dy[] = {0,-1,-1,-1,0,1,1,1};int n, m;int ** maze;int ** vis;struct node{ int x, y; node(int a, int b):x(a),y(b){} node():x(0),y(0){}};node pre[maxn][maxn];queue
qu;vector
a;void BFS(){ node cur; while(!qu.empty())qu.pop(); int c,r; //记录路径 cur.x = 1,cur.y = 1; qu.push(cur); vis[1][1] = 1; while(!qu.empty()) { cur = qu.front(); qu.pop(); //判断是否已经达到终点 if(cur.x == n && cur.y == m) { a.push_back(node(n,m)); while(cur.x != 1||cur.y != 1) { r = cur.x; c = cur.y; a.push_back(node(pre[r][c].x,pre[r][c].y)); cur.x = pre[r][c].x,cur.y = pre[r][c].y; } for(int i = 0 ; i < a.size()-1; i++) printf("(%d,%d)\n", a[i].x, a[i].y); return ; } for(int i = 0 ; i < 8; i++) { //方向调整 r = cur.x + dx[i]; c = cur.y + dy[i]; if(r >= 1 && r <= n && c >= 1 && c <= m && vis[r][c] == 0 && maze[r][c] == 0) { vis[r][c] = vis[cur.x][cur.y]+1; pre[r][c] = node(cur.x,cur.y); qu.push(node(r,c)); } } }}void print(){ for(int i = 0; i < n + 2; i++) { for(int j = 0 ; j < m + 2; j++) { cout << maze[i][j] << " "; } cout << endl; } cout << endl; for(int i = 0 ; i < n+2; i++) { for(int j = 0 ; j < m+2; j++) { cout << vis[i][j] << " "; } cout << endl; } return;}int main(){ freopen("in.txt","r",stdin); cin >> n >> m; maze = new int* [n+2]; vis = new int* [n+2]; for(int i = 0 ; i < n + 2; i++) { maze[i] = new int[m+2]; vis[i] = new int[m+2]; } for(int i = 0 ; i < n+2; i++) for(int j = 0 ; j < m+2; j++) { maze[i][j] = 1; vis[i][j] = 1; } for(int i = 1; i <= n ; i++) for(int j = 1; j <= m ; j++) { cin >> maze[i][j]; vis[i][j] = 0; } BFS(); cout << "(1,1)" << endl; return 0;}

转载于:https://www.cnblogs.com/pprp/p/7739310.html

你可能感兴趣的文章
windows 下安装Apache
查看>>
yii2关闭(开启)csrf的验证
查看>>
mysql 隔离性与隔离级别
查看>>
ckeditor自定义图片上传,结合EXT JS
查看>>
Java编程规范整理
查看>>
SiFive Unleashed启动
查看>>
同步、异步、阻塞、非阻塞
查看>>
cordova开发---cordova环境搭建(windows pc)
查看>>
怎样使用Block来传递消息?
查看>>
好奇你就点进来
查看>>
Effective C++ 34 区分接口继承和实现继承
查看>>
Redis配置文件参数说明
查看>>
drf视图组件、认证组件
查看>>
Python_正则表达式
查看>>
[USACO08NOV]时间管理Time Management(排序,贪心)
查看>>
Hybrid App开发设计与实现
查看>>
Fedora14 mount出现错误时解决办法【亲测有效】
查看>>
实验四
查看>>
如何打开 SSH 服务?
查看>>
BASIC-6_蓝桥杯_杨辉三角形
查看>>