-->迷宫问题

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;
}
}

【POJ - 3984】迷宫问题(dfs)的更多相关文章

  1. poj 3984 迷宫问题(dfs)

    题目链接:http://poj.org/problem?id=3984 思路:经典型的DFS题目.搜索时注意剪枝:越界处理,不能访问处理. 代码: #include <iostream> ...

  2. POJ - 3984 迷宫问题 dfs解法

    #include<stdio.h> #include<string.h> #include<stack> #include<algorithm> usi ...

  3. BFS(最短路+路径打印) POJ 3984 迷宫问题

    题目传送门 /* BFS:额,这题的数据范围太小了.但是重点是最短路的求法和输出路径的写法. dir数组记录是当前点的上一个点是从哪个方向过来的,搜索+,那么回溯- */ /************* ...

  4. POJ 3984 迷宫问题

    K - 迷宫问题 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  5. POJ 3984 迷宫问题(简单bfs+路径打印)

    传送门: http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  6. POJ - 3984 - 迷宫问题 (DFS)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10936   Accepted: 6531 Description ...

  7. POJ - 3984迷宫问题(最短路径输出)

    题目链接:http://poj.org/problem?id=3984 题目: 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  8. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  9. POJ 3984 迷宫问题 bfs 难度:0

    http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring ...

  10. [POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)

    题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 #include<iostream> #include<queue> ...

随机推荐

  1. iptables防火墙入门

    一.iptables基本管理 iptables运行前提:关闭firewalld防火墙再开启iptables,不然造成冲突. 基本指令: 1.部署iptables服务 yum –y install ip ...

  2. k8sStatefulSet控制器

    一.StatefulSet概述 应用程序存在有状态和无状态两种类别,因为无状态类应用的pod资源可按需增加.减少或重构,而不会对由其提供的服务产生除了并发相应能力之外的其他严重影响.pod资源的常用控 ...

  3. 源码安装 qemu-2.0.0 及其依赖 glib-2.12.12

    源码安装qemu-2.0.0 下载源代码并解压 http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 .tar.gz 编译及安装: cd q ...

  4. 使用python脚本进行数据清洗(1)

    1. 原始表 CREATE TABLE ml_100k (userid INT, movieid INT, rating INT, unixtime STRING) ROW FORMAT DELIMI ...

  5. Python3之threading模块

    import threading # Tips:一个ThreadLocal变量虽然是全局变量, # 但每个线程都只能读写自己线程的独立副本,互不干扰. # ThreadLocal解决了参数在一个线程中 ...

  6. QSettings 介绍

    https://blog.csdn.net/liang19890820/article/details/50513695 QSettings settings(“./test.ini”, QSetti ...

  7. Luogu P3809 【模板】后缀排序(后缀数组板题)

    忘完了- emmm-

  8. SpringBoot入门系列:第五篇 JPA mysql(转)

    一,准备工作,建立spring-boot-sample-mysql工程1.http://start.spring.io/ A.Artifact中输入spring-boot-sample-mysql B ...

  9. html 与 jsp 文件格式区别

    html 与 jsp 文件格式区别 html5 <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  10. (转发)Android 源码获取-----在Windows环境下通过Git得到Android源代码

    在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过  ...