目录

  • POJ3984迷宫问题
    • 题目描述
    • 思路分析
    • 代码

POJ3984迷宫问题

日常安利本题我的博客

题目描述

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

思路分析

事实证明,bfs对这种数字矩阵的处理能力明显不如dfs,bfs对距离矩阵的处理更强。
之前对图的处理多是那种邻接矩阵的处理,但是对这种数字矩阵的处理要差很多,刚开始做法大体是知道,但是编程时却有点蒙,基础太差了。
首先,回忆一下bfs。bfs就是广度优先搜索,从起始点开始,将这个点相连的点加入到队列之中,标记经过的点,然后依次将队列中的点取出,然后加入与这个点相连的点(要并未访问过的),因为队列先进先出的规律,所以就可以分层次遍历途中所有点。这里值得注意的是,由于是从开始分层遍历,所以先经过的点一定是最优的。即如果某个点是最短路的必经之路,那么第一次访问它的前一个节点也一定是必经之路。通过这个特点,就可以在将点加入队列的时候,顺便记录一下他的父亲节点(即这个节点的上一个节点)。这样通过队最后一个节点开始递归,就可以找到最短路径了。
记录路径时,因为这个图只有上下左右四个方向,所以可以通过方向记录,空间上这么做更为优秀,但是为了之后处理距离矩阵的图,所以用struct数组存点的路径。另外我的代码并没有采用递归,而是使用差不多的栈结构。在路径比较长时,可以使用vector代替,但是本题不需要,我就懒着了吧_

代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<string>
#include <stack>
#include<queue>
using namespace std ;#define mem(a) memset(a,0,sizeof(a))
#define ll long longconst double eps = 1e-8;
const int maxn = 110010;//须填写
const int inf = 0x3f3f3f3f;int dir[4][2]={0,-1,   //up0,1,    //down-1,0,   //left1,0,    //rights
};int vis[10][10];
int pic[10][10];
struct Node
{int x;int y;
};
Node way[10][10];void bfs(Node node)
{queue <Node> que;Node n;int x,y;que.push(node);vis[node.x][node.y]=1;way[node.x][node.y].x=-1;while(!que.empty()){n=que.front();que.pop();for(int i=0;i<4;i++){x=n.x+dir[i][0];y=n.y+dir[i][1];if(x>=0&&x<5&&y>=0&&y<5&&pic[x][y]==0&&vis[x][y]==0){way[x][y]=n;n.x=x;n.y=y;vis[x][y]=1;que.push(n);}}}
}int main()
{//freopen("in.txt", "r", stdin);for(int i=0;i<5;i++){for(int j=0;j<5;j++){scanf("%d",&pic[i][j]);}}Node node;stack<Node> s;node.x=0;node.y=0;bfs(node);node.x=4;node.y=4;while(node.x!=-1){s.push(node);node=way[node.x][node.y];}while(!s.empty()){node=s.top();printf("(%d, %d)\n",node.x,node.y);s.pop();}return 0;
}

POJ3984迷宫问题相关推荐

  1. poj3984 迷宫问题 bfs 最短路 广搜

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27913   Accepted: 16091 Descriptio ...

  2. POJ3984 迷宫问题【BFS】

    好长时间没有敲过代码了,感觉之前学过的都忘了,趁着这个暑假,打算把之前学习的东西都复习一下,当然得慢慢来,毕竟好长时间不敲代码了,怎么着都有些生疏,再加上之前学的也不咋地,相当于回炉重造吧,见笑见笑. ...

  3. CCF认证训练行动路线图

    通过CCF认证的训练题选自三个方面,一是CCF认证试题,二是使用北大百练的练习题等等,三是ACM-ICPC的练习题. CCF认证的试题是必须练习的,通过CCF试题的练习有助于了解试题风格特点.然而CC ...

  4. TYUT-A专题题解(二)

    TYUT-A专题题解(一) TYUT-A专题题解(二) 36暴力枚举 AOJ0008 Sum of 4 Integers[暴力]_海岛Blog-CSDN博客 HDU1407 测试你是否和LTC水平一样 ...

  5. 基础训练(六~十)题解

    基础训练(六) HDU1248 寒冰王座[0/1背包+DP] - 海岛Blog - CSDN博客 HDU1287 破译密码[密码] - 海岛Blog - CSDN博客 HDU1408 盐水的故事[模拟 ...

  6. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

  7. 最短路算法详解(Dijkstra/SPFA/Floyd)

    转自:http://blog.csdn.net/murmured/article/details/19281031 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短 ...

  8. kuangbin 专题一 简单搜索

    kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...

  9. 算法之路——深搜、广搜(简单搜索)

    搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...

最新文章

  1. [收集] Web服务相关的, 介绍框架(framework)类的论文
  2. html5 原生 弹窗,一起来看 HTML 5.2 中新的原生元素 dialog
  3. 重磅直播|光学3D测量技术原理及应用
  4. poj 2455 Secret Milking Machine(二分枚举+最大流)
  5. linux给oracle导入sql语句,Linux数据库创建与数据导入
  6. dubbo超时重试和异常处理
  7. 队列和消息队列_消息队列概述[幻灯片]
  8. 开发者论坛一周精粹(第四十七期)服务器变更已备案域名需要重新备案吗?
  9. 【毕业设计】jsp+sql毕业选题系统(论文)
  10. 明明是数字“1000”转换成整形时却报错---BOM 非法字符 /65279(FEFF) big endian(FEFF)和little endian(FFFE) 模式
  11. 内存之私有sql区和共享sql区
  12. 2021-08-08索引在小数据量的时候用处不大,但在大数据的时候十分明显
  13. docker java镜像_Docker容器引擎与架构
  14. Anaconda更新PIP
  15. HBuilderX 快捷键
  16. pbootcms模板忘记后台密码怎么办?
  17. php 语句以句号结尾,短句末尾是否用句号
  18. iptables中DNAT、SNAT和MASQUERADE
  19. Jenkins怎么发邮件,5年字节自动化大神手把手教你
  20. mysql触发器更新自己表_mysql 触发器更新自己表|单表操作 阿星小栈

热门文章

  1. php移除excel密码,excel2007密码怎么取消
  2. 动态链接库、静态链接库
  3. MySQL数据库实际应用中,需求分析阶段需要做什么?
  4. css中多行文本溢出显示省略号的方法
  5. MOSFET驱动电路
  6. RuoYi框架放行vue和某些公开接口
  7. Linux下利用ssh远程文件传输 传输命令 scp
  8. 清空Github仓库方法
  9. 0x80073712_Win10更新提示0x80073712错误代码解决方法
  10. android Check the JVM arguments defined for the gradle process in: