#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语言题解相关推荐

  1. 洛谷P1605 迷宫(dfs) 题解

    题目来源: 点击打开链接 题目描述: 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标 ...

  2. dfs 洛谷 P1605 迷宫

    洛谷 P1605 迷宫 题目: 链接 https://www.luogu.com.cn/problem/P1605 思路:从出发点点出发dfs搜索每一次可以到达终点的路径,边界条件为不能走障碍物(在输 ...

  3. 【洛谷P1605 迷宫】

    P1605 迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这是一道很简单的迷宫搜索题,适合搜索初学者练习. 思路 用mp数组表示迷宫地图 用vis数组表示"打标记& ...

  4. 洛谷—— P1605 迷宫

    P1605 迷宫 题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在 ...

  5. 洛谷——P1605 迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  6. 洛谷 | P1605 迷宫(DFS) C++

    题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...

  7. (Java实现) 洛谷 P1605 迷宫

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  8. 洛谷 P1605 迷宫(DFS模板)

    题目 https://www.luogu.com.cn/problem/P1605 思路 写一个DFS模板 #include<iostream> #include<algorithm ...

  9. 深度优先搜索——迷宫(洛谷 P1605)

    题目选自洛谷P1605 题目是非常经典以及简单的DFS题目 这里给出模板 int dfs(int t) {if(满足输出条件){输出解;}for(int i=1;i<=尝试方法数;i++)if( ...

最新文章

  1. (筆記) 如何安裝Altera USB Blaster? (SOC) (Quartus II) (DE2)
  2. 为什么阿里Java规约禁止使用Java内置Executors创建线程池?
  3. centos 6.x 64位 运行32位程序
  4. php类同时调用两个参数,如何让一个类选择器同时调用两个class值_html/css_WEB-ITnose...
  5. 数论专题 hdu2136
  6. 页面加载速度优化的建议
  7. java实训---------双色球彩票管理系统(LotterySystem)
  8. 短视频新媒体运营策划推广工作计划表模板
  9. 查看IP访问服务器日志的次数
  10. Python之列表和元组
  11. 将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空
  12. C++ HOOK PC微信实现无限制多开,理论支持所有版本,本文使用微信 3.0.0.47
  13. js原生css修改,原生js获取、添加、修改_非行间css样式
  14. 3 JWT 和 JWS
  15. 接口测试、接口协议以及常用接口测试工具介绍
  16. 下载到烦人的流氓软件了,电脑卡,弹窗多的看不到鼠标怎么办
  17. BiocManager安装R包解决下载速度太慢的问题
  18. 器件选型电源篇-AC/DC电源模块选型及性能测试
  19. java 中加载图片
  20. 计算机窗口移动不了怎么办,电脑鼠标拖不动文件怎么办 电脑鼠标拖动不灵敏如何解决...

热门文章

  1. SQL数据导入导出语句大全[英文部分比较全面]
  2. C语言 常用内存函数
  3. 使用go实现反向代理
  4. JAVAer要了解的掌故
  5. 野火STM32F1开发板 IIC 0.96OLED 波形显示
  6. php字符串分隔函数,php字符串分割函数的简单示例
  7. java语言与其他语言的区别是_浅谈Java语言和其他语言的区别
  8. 互联网医疗以线下诊所为基地掀起共享医疗风潮
  9. C# 集合多字段分组排坑
  10. python里defoults_Python Part.Compound方法代码示例