-->迷宫问题

Descriptions:

定义一个二维数组:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。


Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。


Output

左上角到右下角的最短路径,格式如样例所示。


Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

题目链接

https://vjudge.net/problem/POJ-3984

没有用到队列,想了一个染色+dfs的方法,直接就dfs走一遍地图,然后按步数染色,最后按步数从大到小输出即可,头脑简单的我直接就暴力搜了

AC代码:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
typedef long long ll;
const int maxx=;
const int n=;
int mp[maxx][maxx];//原始地图
int vis[maxx][maxx];//路径(染色)
int dx[maxx];//输出路径
int dy[maxx];
void dfs(int i,int j)
{
if(mp[i][j]== || i< || j>n || i>n || j<)
return;
mp[i][j]=;
if(!mp[i][j+] && j+>= && j+<=n)//向右
{
vis[i][j+]=vis[i][j]+;
dfs(i,j+);
}
if(!mp[i+][j] && i+>= && i+<=n)//向下
{
vis[i+][j]=vis[i][j]+;
dfs(i+,j);
}
if(!mp[i-][j] && i->= && i-<=n)//向上
{
vis[i-][j]=vis[i][j]+;
dfs(i-,j);
}
if(!mp[i][j-] && j->= && j-<=n)//向左
{
vis[i][j-]=vis[i][j]+;
dfs(i,j-);
}
}
int main()
{
memset(vis,,sizeof(vis));
memset(mp,,sizeof(mp));
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
cin >> mp[i][j];
vis[][]=;
dfs(,);
//路径直观图,可以看走的过程,需要看的把注释去掉(力荐!!!)
/* for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
printf("%4d ",vis[i][j]);
}
cout << endl;
}*/
int g=vis[n][n];
int x,y;
x=n,y=n;
dx[g]=n;
dy[g]=n;
while(g!=)//按步数从大到小输出
{
g--;
if(vis[x-][y]==g)
{
dx[g]=x-;
dy[g]=y;
x--;
}
else if(vis[x+][y]==g)
{
dx[g]=x+;
dy[g]=y;
x++;
}
else if(vis[x][y+]==g)
{
dx[g]=x;
dy[g]=y+;
y++;
}
else if(vis[x][y-]==g)
{
dx[g]=x;
dy[g]=y-;
y--;
}
}
for(int i=; i<=vis[n][n]; i++)
{
cout << "(" << dx[i]- << "," << " " <<dy[i]- << ")" << endl;
}
}

最新文章

  1. MyBatis学习(三)
  2. 一生伏首拜阳明------&lt;明朝那些事儿&gt;
  3. APK签名是如何生成的
  4. telnet: connect to address 127.0.0.1: Connection refused
  5. jdk环境搭建
  6. windows service自动启动相关设置
  7. redis提示Could not get a resource from the pool(jedis连接池配置)
  8. 分布式缓存技术redis学习(二)——详细讲解redis数据结构(内存模型)以及常用命令
  9. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)
  10. jQuery input -&gt; file change事件bug
  11. 关于我和document.write那点不得不说的事
  12. (转)rpm安装和卸载软件
  13. 初试valgrind内存调试工具
  14. 剑指Offer——企业级项目中分层的含义与依据及多态的优势
  15. vmware panic(CPU 0 caller 0x)launchd exited
  16. module &#39;sign.views&#39; has no attribute &#39;search_name&#39;
  17. Oracle中start with...connect by子句的用法
  18. java与javax的区别分析(转)
  19. python import引入不同路径下的模块
  20. python之路——16

热门文章

  1. zsh使用技巧(WIP)
  2. V2018.5 MB SD C4功能和软件详细信息更新
  3. fegin熔断autowired失败
  4. [Android]第一个cm调试分析
  5. 小程序 swiper 轮播图滚动图片 + 视频
  6. ftell函数
  7. Linux下SHA256校验
  8. Spring Boot教程(三十七)整合MyBatis
  9. Java线程之Timer
  10. DL反向传播理解