博客
关于我
迷宫寻路 (20 分)
阅读量:670 次
发布时间:2019-03-15

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

给定一个M行N列的迷宫图,其中 "0"表示可通路,"1"表示障碍物,无法通行。在迷宫中只允许在水平或上下四个方向的通路上行走,走过的位置不能重复走。**

**5行8列的迷宫如下:

0 1 1 1 0 0 0 00 0 0 1 0 0 0 00 1 0 0 0 1 0 00 1 1 1 0 1 1 01 0 0 0 0 0 0 0

则从左上角(1,1)至右下角(5,8)的最短路径为:

1,1–》2,1–》2,2–》2,3–》3,3–》3,4–》3,5–》4,5–》5,5–》5,6–》5,7–》5,8

题目保证每个迷宫最多只有一条最短路径。

请输出该条最短路径,如果不存在任何通路,则输出"NO FOUND".

输入格式:

第一行,输入M和N值,表示迷宫行数和列数。

接着输入M行数值,其中,0表示通路,1表示障碍物。每列数值用空格符间隔。

接下来可能输入多组迷宫数据。

当输入M的值为-1时结束输入。

输出格式:

按行顺序输出路径的每个位置的行数和列数,如 x,y

如果不存在任何路径,则输出"NO FOUND".

每组迷宫寻路结果用换行符间隔。

输入样例:

在这里给出一组迷宫。例如:

8 8    0 0 1 0 0 0 1 00 0 1 0 0 0 1 00 0 0 0 1 1 0 00 1 1 1 0 0 0 00 0 0 1 0 0 0 00 1 0 0 0 1 0 00 1 1 1 0 1 1 01 0 0 0 0 0 0 04 4    0 0 1 00 0 0 00 0 1 1 0 1 0 0-1 -1

输出样例:

在这里给出相应的输出。例如:

1,12,13,14,15,15,25,36,36,46,57,58,58,68,78,8NO FOUND
#include
#include
using namespace std;const int N=110,inf=0x3f3f3f3f;int dist[N][2],path[N][2],m,n,minn;//dist存的是最短路径的x,y path存的是当前路径的x,yint dx[4]={ 0,1,0,-1},dy[4]={ 1,0,-1,0};bool st[N][N],g[N][N],success;void dfs(int step,int x,int y){ if(step>minn)return;//如果当前步骤已经大于最小步数,结束搜索 if(x==n&&y==m) { memcpy(dist,path,sizeof dist); success=1; minn=step; return ; } for(int i=0;i<4;i++) { int tx=x+dx[i],ty=y+dy[i]; if(tx>=1&&tx<=n&&ty<=m&&ty>=1&&!g[tx][ty]&&!st[tx][ty]) { st[tx][ty]=1; path[step][0]=tx,path[step][1]=ty; dfs(step+1,tx,ty); st[tx][ty]=0; } }}int main(){ while(cin>>n>>m,~n) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j]; success=0; minn=inf; st[1][1]=1; path[0][0]=1,path[0][1]=1; dfs(1,1,1); if(success) for(int i=0;i

转载地址:http://pvzqz.baihongyu.com/

你可能感兴趣的文章
MySQL慢查询问题排查
查看>>
mysql截取sql语句
查看>>
mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
查看>>
mysql手工注入
查看>>
MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
查看>>
Mysql执行update by id的过程
查看>>
mysql执行计划
查看>>
MySQL执行计划 EXPLAIN参数
查看>>
MySQL执行计划【explain】,看这一篇就够啦!
查看>>
Mysql执行计划字段解释
查看>>
mysql执行计划怎么看
查看>>
MySQL执行计划解读
查看>>
mysql执行顺序与索引算法
查看>>
mysql批量update优化_Mysql中,21个写SQL的好习惯,你值得拥有呀
查看>>
mysql批量update操作时出现锁表
查看>>
MYSQL批量UPDATE的两种方式
查看>>
mysql批量修改字段名(列名)
查看>>
MySQL批量插入数据遇到错误1213的解决方法
查看>>
mysql技能梳理
查看>>
MySQL报Got an error reading communication packets错
查看>>