最少步数

时间限制:3000 ms  |  内存限制:65535 KB
难度:4

描述

这有一个迷宫,有0~8行和0~8列:

1,1,1,1,1,1,1,1,1
 1,0,0,1,0,0,1,0,1
 1,0,0,1,1,0,0,0,1
 1,0,1,0,1,1,0,1,1
 1,0,0,0,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,0,0,0,1
 1,1,1,1,1,1,1,1,1

0表示道路,1表示墙。

现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?

(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)

输入
第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。
输出
输出最少走几步。
样例输入
2
3 1  5 7
3 1  6 7
样例输出
12
11
 1
 2 #include <stdio.h>
 3 int tu[9][9]={
 4 1,1,1,1,1,1,1,1,1,
 5 1,0,0,1,0,0,1,0,1,
 6 1,0,0,1,1,0,0,0,1,
 7 1,0,1,0,1,1,0,1,1,
 8 1,0,0,0,0,1,0,0,1,
 9 1,1,0,1,0,1,0,0,1,
10 1,1,0,1,0,1,0,0,1,
11 1,1,0,1,0,0,0,0,1,
12 1,1,1,1,1,1,1,1,1,
13 };
14 int bs[9][9]={0};
15 int min=32;
16
17 int DFS(int a,int b,int c,int d,int count)/*起始位置(a,b),终点位置(c,d),步数count 初值为 0 */
18 {
19     if(tu[a][b]==1) return count;
20     else
21     {
22         if(a==c&&b==d)
23         {
24             if(min>count) min=count;
25         }
26         bs[a][b]=1;
27
28         if((!tu[a-1][b])&&(!bs[a-1][b]))/*上边*/
29             count=DFS(a-1,b,c,d,count+1);
30         if((!tu[a+1][b])&&(!bs[a+1][b]))/*下边*/
31             count=DFS(a+1,b,c,d,count+1);
32         if((!tu[a][b-1])&&(!bs[a][b-1]))/*左边*/
33             count=DFS(a,b-1,c,d,count+1);
34         if((!tu[a][b+1])&&(!bs[a][b+1]))/*右边*/
35             count=DFS(a,b+1,c,d,count+1);
36
37         bs[a][b]=0;
38
39         return count-1;
40     }
41 }
42
43 int main(void)
44 {
45     int a,b,c,d,n,count;
46     scanf("%d",&n);
47     while(n--)
48     {
49         count=0;
50         min=30;
51         scanf("%d%d%d%d",&a,&b,&c,&d);
52         if(tu[a][b]==0 && tu[c][d]==0)
53         {
54             DFS(a,b,c,d,count);
55             printf("%d\n",min);
56         }
57     }
58     return 0;
59 }
60         

转载于:https://www.cnblogs.com/xiaoyunoo/p/3516875.html

最少步数----深搜相关推荐

  1. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  2. P2668 斗地主 dp+深搜版

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  3. 方格取数(多线程dp,深搜)

    https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...

  4. ACM 海贼王之伟大航路(深搜剪枝)

    "我是要成为海贼王的男人!" 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着"唯一的大秘宝"--ONE PIECE).而航程中间,则是各式各样的 ...

  5. 骑士精神(双向深搜+meet in the middle)

    题目描述 在一个5×55×55×5的棋盘上有121212个白色的骑士和121212个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为111,纵坐标相差为22 ...

  6. 22-广搜深搜 Breadth-first Search Depth-first Search

    参考:<算法导论>第22章  <算法图解>第6章 目录 图G=(V,E) 广度优先搜索 一:模板(POJ 3984 迷宫问题)(bfs+输出路径) 二:闪现(类似问题http: ...

  7. 搜索算法-深搜与广搜

    1.深搜与回溯法 *本文主要是供自己复习,或者做笔记总结使用,专业性有待考量,如果遇到不对的地方还请指出来. 什么是回溯法?枚举每一个填空的选项,然后判断这个选项是否合法.如果合法则继续填写下一个选项 ...

  8. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  9. 水叮当的舞步 深搜

    背景 Background 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 描 ...

最新文章

  1. ROS_Kinetic ubuntu 16.04
  2. 字节跳动大佬的Python自学笔记.pdf
  3. 宇宙和你,本质上其实只是个八维数字?
  4. ubuntu shell实现99乘法表
  5. 需求评审五个维度框架分析及其带来的启示-5-结束语
  6. ACL 2019 开源论文 | 使用跨领域语言建模的跨领域命名实体识别
  7. html5 drawimage 不显示,javascript – 来自视频的HTML5 Canvas drawImage在第一次绘制时不显示...
  8. HTML5新增视频标签(HTML5)
  9. 17-05-25模拟赛
  10. Win10桌面点鼠标右键一直转圈的解决方法
  11. 深入理解 http 反向代理(nginx)
  12. 读洛水《知北游》有感(1)
  13. OneDrive无法打开登陆怎么办
  14. APP开发应注意的几点
  15. C语言速成笔记 —— 考点详解 知识点图解
  16. 收集一些有用的php函数---from cmstop
  17. 数学模型在计算机科学与技术,科学计算与数学建模
  18. NoSQL概述-从Mongo和Cassandra谈谈NoSQL
  19. [题解]CF662D
  20. 一个平凡的外国人,却对中国大爱无疆

热门文章

  1. libusb开发:bulk/interrupt数据传输、hotplug热插拔
  2. 开发工作和测试工作不能由同一部分人来完成。如果开发人员对程序的功能要求理解错了,就很容易按照错误的思路来设计测试用例。如果开发人员同时完成测试工作,那么测试工作就很难取得成功。
  3. 不是每个人都适合linux
  4. 伯颜的诗和“金佛”趣事
  5. 基于DM642的X264开源代码实现的研究
  6. 64位Ubuntu kylin 16.04使用fastboot下载内核到tiny4412开发板
  7. 2020 ccf推荐中文期刊_CCF推荐国际学术期刊
  8. git 32位_编译64位的BorderlessGaming
  9. 计算机怎么设置网络共享,局域网共享设置,教您电脑怎么设置局域网共享
  10. 2.转动的地球shader