P1238 走迷宫
原题链接 https://www.luogu.org/problemnew/show/P1238
为了巩固一下刚学习的广搜,练一下迷宫类型的题 不过这道题我用的深搜.....
看问题,我们就知道这道题和平时做的走迷宫的题差不多,只是把方案数改成了输出路径
那也很好办,我们只要记录一下每一步的坐标,如果到了终点就输出记录下来的坐标就好了
注意题目中给出的优先顺序:左上右下 表示被坑了一次qaq
给出AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,a[][];
int dx[]={,-,,},dy[]={-,,,}; //注意题目中给出的顺序!!! 优先顺序:左上右下
int sx,sy,fx,fy,flag=,t; //sx,sy表示起点横纵坐标,fx,fy表示终点横纵坐标
bool vis[][]; //判断是否到达过
bool map[][]; //地图
void search(int x,int y)
{
if(x==fx&&y==fy) //判断是否到终点
{
for(int j=;j<=t;j++)
printf("(%d,%d)->",a[j][],a[j][]); //输出路径
printf("(%d,%d)\n",fx,fy);
flag=; //标记为有解
}
for(int i=;i<;i++) //四个方向
{
if(map[x+dx[i]][y+dy[i]]==&&vis[x+dx[i]][y+dy[i]]==&&x+dx[i]>=&&x+dx[i]<=n&&y+dy[i]>=&&y+dy[i]<=m)
//判断是否在界内,以及该点是否到过和是否能走
{
t++; //步数+1
vis[x][y]=; //标记为1,表示该点已经走过
a[t][]=x; //记录横坐标
a[t][]=y; //记录纵坐标
search(x+dx[i],y+dy[i]); //深搜的递归思想~,进一步搜索下去
vis[x][y]=; //回溯操作
t--;
}
} }
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
cin>>map[i][j];
cin>>sx>>sy;
cin>>fx>>fy;
search(sx,sy); //开始搜索
if(flag==) cout<<"-1"; //如果无解,则输出-1
return ;
}
P1238 走迷宫的更多相关文章
- 洛谷——P1238 走迷宫
P1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数 ...
- 洛谷P1238 走迷宫
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...
- 洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- 洛谷 P1238 走迷宫
因为小处疏漏,多花了半小时的水题 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束 ...
- luogu P1238 走迷宫--DFS模板好(水)题
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- 洛谷—— P1238 走迷宫
https://www.luogu.org/problem/show?pid=1238 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走 ...
- C语言动态走迷宫
曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...
- sdut 2449走迷宫【最简单的dfs应用】
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...
- BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
数据范围太大不能直接高斯消元, tarjan缩点然后按拓扑逆序对每个强连通分量高斯消元就可以了. E(u) = 1 + Σ E(v) / degree(u) 对拍时发现网上2个程序的INF判断和我不一 ...
随机推荐
- Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储 ...
- 创建简单的npm脚手架
前言 vue-cli, webpack-cli 等脚手架是不是用起来爱不释手?自己写了个模版每次来回复制粘贴代码是不是很难维护?如果你是对前端.Node操作有一定的了解,同时也存在以上疑问,那就请尽情 ...
- Java中1.0 / 0.0 会输出什么?
蓝桥杯失利后发现算法与数据结构的重要性,开始学习算法,刚刚在看<算法4>,看到了这么个东西,让我对java中的size运算有了新的感悟. 在java中输出1/0会发生什么,毫无疑问会报异常 ...
- jdbc封装的类
JDBCUtil,java package cn.qst.util; import java.sql.Connection;import java.sql.DriverManager;import j ...
- Vue 单选框与单选框组 组件
radio组件 v-model : 通过当然绑定的值与input上的value值来确定当前选中项. 在父作用域中通过active设置当前默认选中项,如果选中项发生改变后通过input事件通知传递到父 ...
- AJAX的创建
20:29:50 创建的步骤: 1.创建异步请求的核心对象 2.设置请求方式和地址 3.设置结果产生的回调函数 4.进行结果的逻辑处理 5.获取结果并处理 6.发送请求 <!DOCTYPE ht ...
- vue -webkit-box-orient: vertical webpack打包后被过滤掉了 线上没有这行代码
(1)方法一:加上绿色注释,跳过webpack的css打包 .word-overflow-{ overflow:hidden; text-overflow:ellipsis; display:-web ...
- K3实现按虚拟件/组件发料
最近公司调度部反应了一个K3使用过程中遇到的巨大问题:公司成品BOM组成物料种类破千,绝大部分还不能拆分成组件.为了方便区分,从逻辑上把一堆堆的半成品分成了一个个虚拟件.K3生成的投料单 ...
- iOS----------适配iOS12
library not found for -lstdc++.6.0.9 原因是苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是libstd ...
- adb 查看 android手机的CPU架构
adb shell cat /proc/cpuinfo 当然要下载adb并配置好环境变量