• 问题描述:

水管工游戏是指如下图中的矩阵中,一共有两种管道,一个是直的,一个是弯的,所有管道都可以自由旋转,最终就是要连通入水口可出水口。其中的树为障碍物。

方案:

输入格式:输入的第一行为两个整数N和 M(都不超过10),接下来的N行,每行有M个整数,表示地图中的每一小格。其中0表示树木,1~6分别表示管道的六种不同的摆放方式

输入:

5 4
5 3 5 3
1 5 3 0
2 3 5 1
6 1 1 5
1 5 5 4

输出:

(1,1) (1,2) (2,2) (3,2) (3,3) (3,4) (4,4) (5,4)

  • 算法思路:

本题使用的是深度优先搜索算法,先标识入水口方向,在每次探索新管道的时候上根据入水口方向进行扩展,然后根据管道的类型来判断下一个节点的入水口方向。水管入口:1代表左,2代表右,3代表上,4代表下。

  • 代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. #define INF 10000000
  4. using namespace std;
  5. int n,m,flag=;
  6. int a[][],b[][];
  7. int next[][]={{,},{,-},{,},{-,}};
  8. struct node
  9. {
  10. int x,y;
  11. }s[];
  12. int top=;
  13. void dfs(int x,int y,int r)
  14. {
  15.  
  16. if(x==n&&y==m+)//走到出口
  17. {
  18. flag=;
  19. for(int i=;i<=top;i++)
  20. printf("(%d,%d)",s[i].x,s[i].y);
  21. return ;
  22. }
  23. if(x<||y<||x>n||y>m)return ;
  24. if(b[x][y]==)//如果这个点已在路径中
  25. return ;
  26. b[x][y]=;//标记
  27. top++;
  28. s[top].x=x;
  29. s[top].y=y;
  30. //直水管的情况
  31. if(a[x][y]==||a[x][y]==)
  32. {
  33. if(r==)//入口在左
  34. {
  35. dfs(x,y+,);
  36. }
  37. else if(r==)//入口在右
  38. {
  39. dfs(x,y-,);
  40. }
  41. else if(r==)//入口在上
  42. {
  43. dfs(x+,y,);
  44. }
  45. else//入口在下
  46. {
  47. dfs(x-,y,);
  48. }
  49. }
  50. //弯水管的情况
  51. if(a[x][y]>=&&a[x][y]<=)
  52. {
  53. if(r==)
  54. {
  55. dfs(x+,y,);
  56. dfs(x-,y,);
  57. }
  58. else if(r==)
  59. {
  60. dfs(x-,y,);
  61. dfs(x+,y,);
  62. }
  63. else if(r==)
  64. {
  65. dfs(x,y+,);
  66. dfs(x,y-,);
  67. }
  68. else
  69. {
  70. dfs(x,y+,);
  71. dfs(x,y-,);
  72. }
  73. }
  74. b[x][y]=;//尝试过不能用的点要取消标记并且出栈
  75. top--;
  76. return ;
  77. }
  78.  
  79. int main()
  80. {
  81. scanf("%d%d",&n,&m);
  82. for(int i=;i<=n;i++)
  83. {
  84. for(int j=;j<=m;j++)
  85. {
  86. scanf("%d",&a[i][j]);
  87. }
  88. }
  89. dfs(,,);
  90. if(flag==)
  91. printf("impossible");
  92. printf("\n");
  93. return ;
  94. }

水管工游戏——dfs的更多相关文章

  1. 水管工游戏:dfs(递归)

    添柴网这题好想不能评测,所以不确保代码的正确性 题目描述: 这小节有点难,看不太懂可以跳过哦.最近小哼又迷上一个叫做水管工的游戏.游戏的大致规则是这样的.一块矩形土地被分为N * M的单位正方形,现在 ...

  2. 从零开始Unity3D游戏开发【2 简单的水管工例子】

    1.首先,创建一个新的Project. 2.hierarchy(层)窗体下的Create下添加一个plane(平面) 3.调整Main Camera的视角,让panel显示在Game窗体.这一步比较困 ...

  3. noip模拟赛 水管工的难题

    [问题描述]你是一名优秀的水管工. 一天你遇到了一个棘手的难题. 你需要在一个长方体状的房间内连接一条贯穿房间内部的水管.房间的长为 X,宽为 Y,高为 Z, 整个房间可以看成是 X×Y×Z个小立方体 ...

  4. Luogu P1278 单词游戏(dfs)

    P1278 单词游戏 题意 题目描述 \(Io\)和\(Ao\)在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何 ...

  5. Codeforces Round #374 (Div. 2) A B C D 水 模拟 dp+dfs 优先队列

    A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...

  6. cdoj 1252 24点游戏 dfs

    24点游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1252 Descr ...

  7. HDU 2209 翻纸牌游戏(DFS)

    题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...

  8. POJ - 2676 Sudoku 数独游戏 dfs神奇的反搜

    Sudoku Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smalle ...

  9. Luogu P2664 树上游戏 dfs+树上统计

    题目: P2664 树上游戏 分析: 本来是练习点分治的时候看到了这道题.无意中发现题解中有一种方法可以O(N)解决这道题,就去膜拜了一下. 这个方法是,假如对于某一种颜色,将所有这种颜色的点全部删去 ...

随机推荐

  1. css position各种定位及区别

    position定位: static:静态定位;是position的默认值,元素框正常生成,也就是没有定位时的正常显示. relative:相对定位; 用法一:元素相对自身的原位置偏移某个距离,但是原 ...

  2. 禁用JavaScript之后,你的网站表现如何?

    一 最近要做一个新官网,需求评审完之后,考虑到官网都是纯静态页面,功能简单,操起vue-cli3几秒内创建好了项目脚手架,开发前,我打开了首页模板文件,看到下面这行字,有了一些思考-- <nos ...

  3. python traceback获取详细的异常信息

       运行结果 : 用try except 会报出报错信息,但是没有具体哪个地方报错,多少行,这样不利于查找报错信息 这时我们就可以使用traceback模块 运行结果:    如上图,报错信息会具体 ...

  4. webpack实现开发、测试、生产等环境的打包切换

    使用webpack构建的工程,在开发过程中不同环境的配置不同,在各种环境的打包切换过程中需要手动修改相关配置达到预期目的.但是每次都手动修改会比较麻烦,本文简单介绍如何通过对webpack进行配置,实 ...

  5. 杭电1506 java

    求最大子矩阵面积(dp) import java.util.*; public class Main1{ public static void main(String[] args) { Scanne ...

  6. HTML入门7

    这篇来些可能用的比较少的,调试HTML 程序员调试代码常见,遇到问题一切正常,找出问题解决,满足 来了解下HTML调试, 在浏览器解析和显示之前HTML不会被编译成其他形式,只是解析而不是编译因此运行 ...

  7. (84)Wangdao.com第十八天_JavaScript Promise 对象

    Promise 对象 是 JavaScript 的异步操作解决方案,为异步操作提供统一接口. 目前 JavaScript 原生支持 Promise 对象 它起到代理作用(proxy),充当异步操作与回 ...

  8. harpoxy 配置

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...

  9. oracle根据身份证号码 计算年龄、性别

    一.Oracle根据身份证判断性别: 女生身份证: 431382198103246985 男生身份证: 150921197208173492 SQL语句如下:   select decode(mod ...

  10. Unity 和android 交互 记录

    参考文章 http://www.jianshu.com/p/c06063a403c6 趟坑如下 icon 冲突问题: 设置不了unity icon,显示的是默认的 android 小人 解决方法: 在 ...