洛谷P1605 迷宫 纯C语言题解
#include<stdio.h>
#include<stdlib.h>
int cnt = 0;//记录有多少条路线,初始为0
int N,M,T;//N行 M列 T个障碍
int a[6][6];//先建立一个二维数组,因为不知道参数不能传递数组,就在函数外建立,可以直接调用
int judge(int x,int y);//看看当前的位置有没有障碍
void move(int s_x,int s_y,int e_x,int e_y);//主要的移动函数
int main()
{
scanf("%d%d%d",&N,&M,&T);
int s_x,s_y;//起点坐标
int e_x,e_y;//终点坐标
int b_x,b_y;//障碍坐标
for(int i = 0;i < N;i++)//初始化,把数组内的元素都变成零,零就是可以走的地方
{
for(int p = 0;p < M;p++)
a[i][p] = 0;
}
scanf("%d%d%d%d",&s_x,&s_y,&e_x,&e_y);
s_x–;//转化坐标,C语言数组从零开始,所以要减一
s_y–;
e_x–;
e_y–;
for(int i = 0;i < T;i++)
{
scanf("%d%d",&b_x,&b_y);//读入障碍坐标,并且在数组中将对应的位置写上1,就是不能走的地方
b_x–;//同样将障碍的坐标减一
b_y–;
a[b_x][b_y] = 1;将障碍标为1
}
move(s_x,s_y,e_x,e_y);
printf("%d",cnt);
return 0;
}
int judge(int x,int y)//若返回0,就说明当前位置可以走
{
if(x < 0||y < 0||x >= N||y >= M)
return 0;//越界
if(a[x][y] == 1)
return 0;//碰壁
else
return 1;
}
void move(int s_x,int s_y,int e_x,int e_y)
{
a[s_x][s_y] = 1;//每次走下一步的时候,把当前位置变成障碍,避免走到下一步,发现上一步还能走
if(s_x == e_x&&s_y == e_y)//就向上走,形成死循环
{
cnt++;//每次到达终点,就让计数器加一
}
if(judge(s_x,s_y + 1))//尝试向不同方向走,当judge函数返回下一步的值为1,就说明下一步可以走 move(s_x,s_y + 1,e_x,e_y);
if(judge(s_x,s_y - 1))move(s_x,s_y - 1,e_x,e_y);
if(judge(s_x + 1,s_y))move(s_x + 1,s_y,e_x,e_y);
if(judge(s_x - 1,s_y))move(s_x - 1,s_y,e_x,e_y);
a[s_x][s_y] = 0;
}
删除线格式
这里有一个重要的地方就是在写最后的四个if的时候要注意不能写else if
因为走的时候要把所有路都试一遍,如果是else if的话,如果前面的某个条件满足,就不会判断下面的条件,如果上面的路走不通,下一次回溯的时候还是走那条走不通的路,所以要写成if,就算上面的条件满足了,还是要判断下面的条件。
另外,要自己写一个判断函数,判断下一步能不能走,然后根据情况返回0或1。
差不多就这么多了,溜了溜了
洛谷P1605 迷宫 纯C语言题解相关推荐
- 洛谷P1605 迷宫(dfs) 题解
题目来源: 点击打开链接 题目描述: 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标 ...
- dfs 洛谷 P1605 迷宫
洛谷 P1605 迷宫 题目: 链接 https://www.luogu.com.cn/problem/P1605 思路:从出发点点出发dfs搜索每一次可以到达终点的路径,边界条件为不能走障碍物(在输 ...
- 【洛谷P1605 迷宫】
P1605 迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这是一道很简单的迷宫搜索题,适合搜索初学者练习. 思路 用mp数组表示迷宫地图 用vis数组表示"打标记& ...
- 洛谷—— P1605 迷宫
P1605 迷宫 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在 ...
- 洛谷——P1605 迷宫
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷 | P1605 迷宫(DFS) C++
题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...
- (Java实现) 洛谷 P1605 迷宫
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 洛谷 P1605 迷宫(DFS模板)
题目 https://www.luogu.com.cn/problem/P1605 思路 写一个DFS模板 #include<iostream> #include<algorithm ...
- 深度优先搜索——迷宫(洛谷 P1605)
题目选自洛谷P1605 题目是非常经典以及简单的DFS题目 这里给出模板 int dfs(int t) {if(满足输出条件){输出解;}for(int i=1;i<=尝试方法数;i++)if( ...
最新文章
- (筆記) 如何安裝Altera USB Blaster? (SOC) (Quartus II) (DE2)
- 为什么阿里Java规约禁止使用Java内置Executors创建线程池?
- centos 6.x 64位 运行32位程序
- php类同时调用两个参数,如何让一个类选择器同时调用两个class值_html/css_WEB-ITnose...
- 数论专题 hdu2136
- 页面加载速度优化的建议
- java实训---------双色球彩票管理系统(LotterySystem)
- 短视频新媒体运营策划推广工作计划表模板
- 查看IP访问服务器日志的次数
- Python之列表和元组
- 将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空
- C++ HOOK PC微信实现无限制多开,理论支持所有版本,本文使用微信 3.0.0.47
- js原生css修改,原生js获取、添加、修改_非行间css样式
- 3 JWT 和 JWS
- 接口测试、接口协议以及常用接口测试工具介绍
- 下载到烦人的流氓软件了,电脑卡,弹窗多的看不到鼠标怎么办
- BiocManager安装R包解决下载速度太慢的问题
- 器件选型电源篇-AC/DC电源模块选型及性能测试
- java 中加载图片
- 计算机窗口移动不了怎么办,电脑鼠标拖不动文件怎么办 电脑鼠标拖动不灵敏如何解决...