-->迷宫问题

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. Java 对象序列化和反序列化 (实现 Serializable 接口)

    序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.  把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放 ...

  2. 清除Tomcat缓存

        删除tomcat目录下的缓存文件分别位于:                   tomcat/work                 tomcat/temp                  ...

  3. List集合、泛型、装箱拆箱

    1.List集合 Vector:增删改查都慢 线程同步 线程安全 LlinkedList:以链表结构存储数据,查询慢.增删快 ArrayList:的运行速度比较快 连续数据空间存储数据,查询快(下标) ...

  4. 灵魂拷问:Java如何获取数组和字符串的长度?length还是length()?

    限时 1 秒钟给出答案,来来来,听我口令:"Java 如何获取数组和字符串的长度?length 还是 length()?" 在逛 programcreek 的时候,我发现了上面这个 ...

  5. JSP通过URL给Servlet传值

    jsp传数据: <a id="a1" href="" ></a> <script> $("#a1").a ...

  6. require.context

    带表达式的 require 语句 如果你的 require参数含有表达式(expressions),会创建一个上下文(context),因为在编译时(compile time)并不清楚具体是哪一个模块 ...

  7. [CSP-S模拟测试]:Weed(线段树)

    题目描述 $duyege$的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹.为了查出真相,$duyege$准备修好电脑之后再进行一次金坷垃的模拟实验.电脑上面有若干层金坷垃,每次只能在上面撒上一层高度 ...

  8. [CSP-S模拟测试]:地理课(并查集+线段树分治)

    题目传送门(内部题146) 输入格式 从$geography.in$读入数据. 第一行两个数$n,m$,表示有$n$个点,$m$个时刻.接下来$m$行每行三个数,要么是$1\ u\ v$,要么是$2\ ...

  9. LeetCode---Sort && Segment Tree && Greedy

    307. Range Sum Query - Mutable 思路:利用线段树,注意数据结构的设计以及建树过程利用线段树,注意数据结构的设计以及建树过程 public class NumArray { ...

  10. beta week 2/2 Scrum立会报告+燃尽图 06

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9959 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...