不止代码:迷宫问题(bfs)
题目描述
如下图所示,给出一个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)相关推荐
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- 不止代码,职业发展黄金手册
花了小半天时间,读完了阿里人出品的<不止代码,职业发展黄金手册>,记录下其中的诸多闪光点. 如何快速成长为技术大牛? 做的更多,做的比你主管安排给你的任务更多. 需求分析的时候更加准确,能 ...
- 01迷宫(BFS+记忆)
题目描述 有一个仅由数字 0 与 1 组成的 n × n 格迷宫.若你位于一格 0 上,那么你可以移动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相邻 4 格中的某一格 ...
- [蓝桥杯][算法提高VIP]学霸的迷宫(bfs+dfs)
题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀不 ...
- 走迷宫-双向bfs解法
双向bfs适用于知道起点和终点的状态下使用,从起点和终点两个方向开始进行搜索,可以非常大的提高单个bfs的搜索效率 同样,实现也是通过队列的方式,可以设置两个队列,一个队列保存从起点开始搜索的状态,另 ...
- 【牛客 - 330C】Applese 走迷宫(bfs)
题干: 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫. 在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时 ...
- java蓝桥杯省赛第十届_2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)
这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔者综合了各路大神神乎其技的思想,总结出 ...
- 小白月赛26:E牛牛走迷宫(BFS)
题目链接小白月赛26 牛牛走迷宫 题目大意 一个n行,m列的只包含0和1矩阵,0表示可以走,1表示不能走.,从{1,1}开始移动,一次移动一格,可以向上下左右移动,条路径步数一样,他会选择走字典序最小 ...
- HDU 1728 逃离迷宫(BFS的优化)
这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...
最新文章
- 使用UEFI模式安装win10中的格式化磁盘问题
- UVa12326 Yummy Triangular Pizza(dfs)
- Minor GC、Major GC和Full GC之间的区别(转)
- matlab fix函数_Matlab课后答案第四章
- 【计算机网络】许多信道不能传输低频、直流分量的原因
- Pytorch 一种调整学习率的思路
- 表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗
- 程序员同事被包工头坑了,这社会很魔幻
- 关于C语言编程智能小车毕业设计,基于单片机的多功能智能小车设计-毕业设计论文.doc...
- sipp命令 各参数含义
- 舍得网开发者碰到的问题及解决(转)
- 电路分析 基础 电容、电感元件的串联与并联
- poj 1840(数的hah)
- lucas–kanade_Lucas–Kanade
- mate40怎么用鸿蒙系统,怎么使用鸿蒙系统?
- [NodeJS] Mongoose Populate 基本使用
- 这些信贷数据埋点中不得不知的埋点知识
- 混合模式程序集是针对“v1.1.4322”版的执行时生成的,在没有配置其它信息的情况下,无法在 4.0 执行时中载入该程序集。...
- 【Linux】服务器部署:阿里云服务器购买配置与报价参考
- oracle忘记密码找回
热门文章
- 一文读懂 KMP 算法
- 每天20分钟,只需一年,一年级学生英语听力达到六年级水平!关键是坚持一点都不难!
- python核心模块之pickle和cPickle讲解
- 高德面试官问我:JVM内存溢出后服务还能运行吗,我一顿操作行云流水
- oracle 产看执行计划_ODBA 技能SPM计划
- java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
- 共享服务器硬件要求,共享服务器的配置与管理.doc
- cad必练10张图_CAD比例问题大详解!赶紧收藏!
- Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...
- 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)