题目描述

如下图所示,给出一个N*M的迷宫图和一个入口、一个出口。
编一个程序,打印一条从迷宫入口到出口的路径。这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示)。只能往上、下、左、右四个方向走。如果无路则输出“no way.”。

分析

可以用bfs和dfs两种思路;

bfs

比较好写
用一个类似于链式前向星的思路回溯输出

dfs

也很好写。。。
传一个step用于记录输出
连链式前向星都不用了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
int mp[1001][1001];
int m,n;
int lastx[1001][1001],lasty[1001][1001];
int xx0,yy0,X,Y;
int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
struct node{int x,y;
};
int jd[1001][1001];
int ansx[3001],ansy[3001];
void print(){int px=X,py=Y,num=0;ansx[++num]=X,ansy[num]=Y;while(px!=xx0||py!=yy0){ansx[++num]=lastx[px][py];ansy[num]=lasty[px][py];int ex=px;px=lastx[px][py];py=lasty[ex][py];}astfor(int i=num;i>=1;i--){printf("%d,%d\n",ansx[i],ansy[i]);}return;
}
void bfs(){queue<node>q;q.push((node){xx0,yy0});while(!q.empty()){node o=q.front();q.pop();if(o.x==X&&o.y==Y){print();return;}
//      printf("owner:%d %d\n",o.x,o.y);for(int i=1;i<=4;i++){int nx=o.x+dx[i],ny=o.y+dy[i];if(nx<1||nx>n||ny<1||ny>m||jd[nx][ny]||mp[nx][ny]==-1) continue;lastx[nx][ny]=o.x;lasty[nx][ny]=o.y;q.push((node){nx,ny});jd[nx][ny]=1;
//          printf("%d %d\n",nx,ny);}}printf("no way");
}
int flag=0,ans;
void print2(){for(int i=1;i<=ans;i++){printf("%d,%d\n",ansx[i],ansy[i]);}return;
}
void dfs(int x,int y,int step){if(x<1||x>n||y<1||y>m||jd[x][y]||mp[x][y]==-1) return;
//  printf("%d %d %d\n",x,y,step);if(x==X&&y==Y){flag=1;ansx[step]=x;ansy[step]=y;ans=step;return;}jd[x][y]=1;for(int i=1;i<=4;i++){dfs(x+dx[i],y+dy[i],step+1);if(flag){ansx[step]=x;ansy[step]=y;if(step==1) print2();return;}}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&mp[i][j]);}}scanf("%d%d%d%d",&xx0,&yy0,&X,&Y);
//  bfs();dfs(xx0,yy0,1);return 0;
}
/*
8  5
-1  -1 -1  -1 -10  0  0  0  -1
-1  -1 -1  0  -1
-1  0  0  0  -1
-1  0  0  -1 -1
-1  0  0  0  -1
-1  -1 -1  0  -1
-1  0  0  0  -1
2 1
8 4
*/

不止代码:迷宫问题(bfs)相关推荐

  1. c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  2. 不止代码,职业发展黄金手册

    花了小半天时间,读完了阿里人出品的<不止代码,职业发展黄金手册>,记录下其中的诸多闪光点. 如何快速成长为技术大牛? 做的更多,做的比你主管安排给你的任务更多. 需求分析的时候更加准确,能 ...

  3. 01迷宫(BFS+记忆)

    题目描述 有一个仅由数字 0 与 1 组成的 n × n 格迷宫.若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 ...

  4. [蓝桥杯][算法提高VIP]学霸的迷宫(bfs+dfs)

    题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...

  5. 走迷宫-双向bfs解法

    双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...

  6. 【牛客 - 330C】Applese 走迷宫(bfs)

    题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...

  7. java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...

  8. 小白月赛26:E牛牛走迷宫(BFS)

    题目链接小白月赛26 牛牛走迷宫 题目大意 一个n行,m列的只包含0和1矩阵,0表示可以走,1表示不能走.,从{1,1}开始移动,一次移动一格,可以向上下左右移动,条路径步数一样,他会选择走字典序最小 ...

  9. HDU 1728 逃离迷宫(BFS的优化)

    这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...

最新文章

  1. 使用UEFI模式安装win10中的格式化磁盘问题
  2. UVa12326 Yummy Triangular Pizza(dfs)
  3. Minor GC、Major GC和Full GC之间的区别(转)
  4. matlab fix函数_Matlab课后答案第四章
  5. 【计算机网络】许多信道不能传输低频、直流分量的原因
  6. Pytorch 一种调整学习率的思路
  7. 表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗
  8. 程序员同事被包工头坑了,这社会很魔幻
  9. 关于C语言编程智能小车毕业设计,基于单片机的多功能智能小车设计-毕业设计论文.doc...
  10. sipp命令 各参数含义
  11. 舍得网开发者碰到的问题及解决(转)
  12. 电路分析 基础 电容、电感元件的串联与并联
  13. poj 1840(数的hah)
  14. lucas–kanade_Lucas–Kanade
  15. mate40怎么用鸿蒙系统,怎么使用鸿蒙系统?
  16. [NodeJS] Mongoose Populate 基本使用
  17. 这些信贷数据埋点中不得不知的埋点知识
  18. 混合模式程序集是针对“v1.1.4322”版的执行时生成的,在没有配置其它信息的情况下,无法在 4.0 执行时中载入该程序集。...
  19. 【Linux】服务器部署:阿里云服务器购买配置与报价参考
  20. oracle忘记密码找回

热门文章

  1. 一文读懂 KMP 算法
  2. 每天20分钟,只需一年,一年级学生英语听力达到六年级水平!关键是坚持一点都不难!
  3. python核心模块之pickle和cPickle讲解
  4. 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
  5. oracle 产看执行计划_ODBA 技能SPM计划
  6. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
  7. 共享服务器硬件要求,共享服务器的配置与管理.doc
  8. cad必练10张图_CAD比例问题大详解!赶紧收藏!
  9. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...
  10. 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)