#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//坐标结构体用来保存存储节点
struct node{int x;int y;
};
int flag=0;
const int  maxn=10000;
int m[maxn][maxn];
int book[maxn][maxn]={0};//book 数组 在dfs种用来判断是否走过
//fro  传入的是上一个格子的水管方向  1代表左,2代表上,3代表右,4代表下
//题目有直管和弯管两种,其中 直管有2种状态,水平竖直,同理,弯管有四种状态。
stack<node> Stack;
int path[maxn][2];//保存最后路径
int sum=0;
int M,n;//M 行 n列
void dfs(int x,int y,int fro)
{if(flag==1){return;}if(x==M&&y==n+1){flag=1;//找到方案while(!Stack.empty()){sum++;path[sum][0]=Stack.top().x;path[sum][1]=Stack.top().y;//cout<<"("<<Stack.top().x<<","<<Stack.top().y<<")"<<endl;Stack.pop();}for(int i=sum; i>=1;i--){cout<<"("<<path[i][0]<<","<<path[i][1]<<")"<<endl;}return ;}if(x<1||x>M||y<1||y>n)return;if(book[x][y]==1)return;book[x][y]=1;//标记走过node no;no.x=x;no.y=y;Stack.push(no);//直管的处理if(m[x][y]>=5&&m[x][y]<=6){if(fro==1)//左{dfs(x,y+1,1);//进入下一个dfs,为什么x y+1 可画图得知,以下同理可得}else if(fro==2){dfs(x+1,y,2);}else if(fro==3){dfs(x,y-1,3);}else if(fro==4){dfs(x-1,y,4);}}//弯管if(m[x][y]>=1&&m[x][y]<=4){if(fro==1)//左{//弯管对于每一种情况有 两种处理方式,都要进行dfsdfs(x+1,y,2);//进入下一个dfs,为什么x+1 y 2 可画图得知,以下同理可得dfs(x-1,y,4);}else if(fro==2){dfs(x,y+1,1);dfs(x,y-1,3);}else if(fro==3){dfs(x-1,y,4);dfs(x+1,y,2);}else if(fro==4){dfs(x,y+1,1);dfs(x,y-1,3);}}//dfs后 标记清零book[x][y]=0;Stack.pop();return;
}
int main()
{cin>>M>>n;for(int i=1;i<=M;i++){for(int j=1;j<=n;j++){cin>>m[i][j];}}dfs(1,1,1);//根据题意,初始水流在左边if(!flag){cout<<"Don't find"<<endl;}return 0;
}

水管工游戏(代码附带注释)2020.10.6相关推荐

  1. 水管工游戏——dfs

    问题描述: 水管工游戏是指如下图中的矩阵中,一共有两种管道,一个是直的,一个是弯的,所有管道都可以自由旋转,最终就是要连通入水口可出水口.其中的树为障碍物. 方案: 输入格式:输入的第一行为两个整数N ...

  2. 啊哈算法之水管工游戏

    先给不同状态的水管编给号吧 跟走迷宫一样的,深搜,每个dfs里遍历水管的状态,如果当前状态和水管指向的下一个状态能连通就深搜过去直到走到终点为止 上代码吧,这个代码是加强版,支持了更多的水管的编号,以 ...

  3. tianchai 12023 水管工游戏(DFS搜索)

    题目描述(ID:12023) 标题: 水管工游戏 详情: 这小节有点难,看不太懂可以跳过哦. 最近小哼又迷上一个叫做水管工的游戏.游戏的大致规则是这样的.一块矩形土地被分为N*M的单位正方形,现在这块 ...

  4. 水管工游戏 (深搜)

    水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...

  5. 水管工游戏(随机地图版)

    /*水管工游戏 一块快矩形的土地 被分成N*M的单位正方形 现在这个土地上已经买有一些水管   水管将从(1,1)的左上方 延伸到(N,M)d的矩形下方的右下角右部边缘 水管只有两种     &quo ...

  6. 深度搜索--水管工游戏

    package com.xjj.Ah;import java.util.LinkedList;/*----深度搜索--水管工游戏----* 1. remove(),removeFirst():先移除在 ...

  7. android自定义水管流动,Android水管工游戏的简单脚本

    Unity3d脚本Android水管工游戏的简单脚本 using UnityEngine; using System.Collections; public class TestGoto : Mono ...

  8. 2018-2-22 《啊哈,算法》再练习广度优先搜索,题:炸怪兽, 2-23改用深度优先搜索。宝岛探险(广度,深度,及地图着色)2-24水管工游戏,2-25测试水管工代码...

    2小时. 先是是纠错,通过对代码运行过程的测试.发现是变量打错.以及录入地图❌. 重构练习题,改使用while..end代替for in. ⚠️ : 在while(k <= n)中如果用到nex ...

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

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

  10. 搜索的实例——水管工游戏

    这是一个用深搜解题的例子. [题目描述] 最近小哈又迷上一个叫水管工的游戏.游戏的大致规则是这样的.一块矩形的土地上被分为 n*m 的单位正方形,现在这块土地上已经埋有一些水管,水管将从坐标(1,1) ...

最新文章

  1. 深度学习经典数据集汇总
  2. android qt 对比_QT for android 比较完美解决 全屏问题
  3. Android ANR详解
  4. 算法设计--查找无序数组中第K大的数字
  5. 怎么把写好的python代码打包成exe-详解如何将python3.6软件的py文件打包成exe程序...
  6. python 代码转程序_python将代码转换成网页
  7. 【JS面试向】深入原型链之class的继承
  8. 【转】1.4 Magento2语法讲解
  9. 领域驱动设计(DDD)的实践经验分享之持久化透明
  10. This ZooKeeper instance is not currently serving requests
  11. java的finalize方法使用
  12. 智慧水利大屏可视化决策系统
  13. BusHound详细使用说明
  14. matlab中邮递员问题实例,中国邮递员问题的求解实例.doc
  15. C++ emplace_back用法介绍
  16. Excel 数据透视表
  17. Unity 之 Ping类简析尝试使用
  18. 最新边信息推荐系统综述Research Commentary on Recommendations with Side Information: A Survey and Research Direc
  19. 计算机solidwork实训报告,SolidWorks实训报告.doc
  20. 【长期更新】计算机类企业网申地址内推码大整理

热门文章

  1. 车载蓝牙音乐主动获取播放进度(安富方案)
  2. Geoffrey Hinton
  3. 2021人脸识别模型最全教程!十分钟让你玩转人脸识别
  4. RuiJi Scraper 分页抽取
  5. 不止防JSON技术绕过,RASP相比WAF的七大技术优势
  6. DataGear 自定义数据可视化图表
  7. linux终端模拟器
  8. 苹果主屏幕按钮怎么设置_苹果手机屏幕变大怎么恢复
  9. android room 教程,Android Room的使用详解
  10. 网络隔离下的几种数据交换技术比较