迷宫问题

Description

定义一个二维数组: 

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)

 解题思路:我用的是深搜,从(5,5)开始搜索,把所有可能的路径全部搜一遍,且都必须是最短的路径,搜索的过程中记录一下每一个点的前驱节点(用来搜索完毕之后输出路径)

代码:

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h> struct data {
int a,b,c;//a,b用来记录对应点的前驱节点,c用来记录从(5,5)到这个点的最短路径长度;
}vis[][];
int line[][];
int aa[][]={,,,,,-,-,};//方向:上,下,左,右;
int dfs(int x,int y,int num)
{
int q,w,i,j;
num++;
for(i=;i<;i++){
q=x+aa[i][];
w=y+aa[i][];
if(line[q][w]==){
if(vis[q][w].c==||vis[q][w].c>num){//判断如果这个点没有走过,或者现在走到这个点的路径长度比记录的短的时候就更新这个节点;
vis[q][w].c=num;
vis[q][w].a=x;
vis[q][w].b=y;
dfs(q,w,num);
}
}
}
}
int main ()
{
int i,j;
memset(line,,sizeof(line));
memset(vis,,sizeof(vis));
for(i=;i<=;i++){//因为给出图只有5*5的大小,所以可以使用邻接矩阵来存储;
for(j=;j<=;j++){
scanf("%d",&line[i][j]);
}
}
vis[][].c=;
dfs(,,);
int x,y,q,w;
x=y=;
while(x!=||y!=){//通过每一个点搜索时记录的前驱节点的信息,从(1,1)开始输出所有的节点;
printf("(%d, %d)\n",x-,y-);
q=vis[x][y].a;
w=vis[x][y].b;
x=q;
y=w;
}
printf("(4, 4)\n");
return ;
}

poj 3984 -- 迷宫问题 深搜的更多相关文章

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

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

  2. POJ 3984 迷宫问题

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

  3. PTA 7-33 地下迷宫探索(深搜输出路径)

    地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...

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

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

  5. POJ 1128 拓扑排序 + 深搜

    /* (⊙v⊙)嗯 貌似是一个建图 拓扑+深搜的过程.至于为什么要深搜嘛..一个月前敲得题现在全部推了重敲,于是明白了.因为题意要求如果有多个可能的解的话. * 就要输出字典序最小的那个.所以可以对2 ...

  6. poj 3984:迷宫问题(广搜,入门题)

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

  7. POJ 3984 迷宫问题 记录路径的广搜

    主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...

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

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

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

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

随机推荐

  1. Ubuntu Eclipse ns3编译中 遇到的OSError 系列问题

    问题1:Permission denied 解决方法:修改文件权限,利用 chmod 命令 修改在 /home/wasdns/workspace/MyNS3_Mac/ns-3.25 (eclipse工 ...

  2. linux——压缩解压命令学习简单笔记

    一: 命令名称:gzip 命令英文原意:GNU zip 命令所在路径:/bin/gzip 执行权限:所有用户 语法:gzip 选项 [文件] 功能描述:压缩文件 压缩后文件格式:.gz 1:只能压缩文 ...

  3. rospy 中service

    Server部分: #!/usr/bin/env python import sys import os import rospy #from beginner.srv import * from b ...

  4. SQLServer中对时间和长度的处理

    ---关于时间处理的函数 GETDATE() DATEADD(DAY,-20,GETDATE()) CONVERT(VARCHAR(100), GETDATE(), 112) DATENAME(PAR ...

  5. Eclipse打JAR包,插件FatJar安装与使用

    下载fatJar插件,解压缩后是一个.../plugins/(net...)把plugins下面的(net..)文件夹拷贝到eclipse 的plugins下,重新启动Eclipse3.1,Windo ...

  6. Codeforces 855B - Marvolo Gaunt's Ring

    855B - Marvolo Gaunt's Ring 思路:①枚举a[j],a[i]和a[k]分别用前缀最小值最大值和后缀最小值和后缀最大值确定. ②dp,dp[i][j]表示到第j为止,前i+1个 ...

  7. angular惰性加载拓展剖析

    最近把一个比较旧的业余项目重新升级了下,将主文件进行了剥离,增加了些惰性加载的配置,将过程中一些零散的知识点做个总结,同时尽量深入原理实现层面. 项目环境: 前端框架:angular2.0.0-bet ...

  8. 检验二叉树序列化的合理性 Verify Preorder Serialization of a Binary Tree

    2018-07-31 17:47:13 问题描述: 问题求解: 本题要求在不构建二叉树的情况下对先序遍历生成的序列化字符串进行合法性验证,这里有个技巧性较强的验证方法,就是采用当前可用的指针数目进行验 ...

  9. SVN同步版本库与网站目录

    如何创建SVN版本库及同步文件到WEB目录 来源:空谷 一 安装与配置SVN 1.安装subversion centos: yum install subversion ubuntu: apt-get ...

  10. Android之MVC模式的使用

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...