水管工游戏:dfs(递归)
添柴网这题好想不能评测,所以不确保代码的正确性
题目描述:
这小节有点难,看不太懂可以跳过哦。
最近小哼又迷上一个叫做水管工的游戏。游戏的大致规则是这样的。一块矩形土地被分为N * M的单位正方形,现在这块土地上已经埋设有一些水管,水管将从坐标为(1,1)左上角左部边缘,延伸到(N,M)右下角右部边缘。水管只有2种,如下图所示。
每种管道将占据一个单位正方形土地。你现在可以旋转这些管道,使得构成一个管道系统,即创造一条从(1,1)到(N,M)的连通管道。标有树木的方格表示这里没有管道。如下图:一个4*5的土地中(4,2)处有一个树木。
我们可以旋转其中的一些管道,使之构成一个连通的管道系统,如下图。
如果通过旋转管道可以使之构成一个连通的管道系统,就输出铺设的路径,否则粗出impossible。
输入格式:
输入的第一行为两个整数N和 M(都不超过10),接下来的N行,每行有M个整数,表示地图中的每一小格。其中0表示树木,1~6分别表示管道的六种不同的摆放方式
输出格式:
样例 1 :
说明:
输入: 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)
#include<iostream>
using namespace std;
int n, m, a[12][12],book[12][12],ans=0,an=0;struct node {int x;int y;
}bu[12]; //标记路径void dfs(int x, int y, int g) { //g:1234 入水口:右下左上if (x == n&&y == m + 1) { an = 1;for (int i = 0; i < ans; i++)cout <<"("<< bu[i].x << "," << bu[i].y << ")";return;}if (x<1 || y<1 || x>n || y>m || a[x][y] == 0|| book[x][y] == 1)return;book[x][y] = 1; //标记已用bu[ans].x = x;bu[ans].y = y;ans++; //记录步数if (a[x][y] > 4) {if (g == 1)dfs(x, y - 1, 1);if (g == 2)dfs(x - 1, y, 2);if (g == 3)dfs(x, y + 1, 3);if (g == 4)dfs(x + 1, y, 4);}else {if (g == 1)dfs(x - 1, y, 2), dfs(x + 1, y, 4);if (g == 2)dfs(x, y + 1, 3), dfs(x, y - 1, 1);if (g == 3)dfs(x - 1, y, 2), dfs(x + 1, y, 4);if (g == 4)dfs(x, y + 1, 3), dfs(x, y - 1, 1);}book[x][y] = 0;ans--; //回溯
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j]; //读入地图dfs(1, 1, 3); //入口是左---3if (!an)cout << "impossible\n";return 0;
}
转载于:https://www.cnblogs.com/52dxer/p/10458302.html
水管工游戏:dfs(递归)相关推荐
- 水管工游戏——dfs
问题描述: 水管工游戏是指如下图中的矩阵中,一共有两种管道,一个是直的,一个是弯的,所有管道都可以自由旋转,最终就是要连通入水口可出水口.其中的树为障碍物. 方案: 输入格式:输入的第一行为两个整数N ...
- tianchai 12023 水管工游戏(DFS搜索)
题目描述(ID:12023) 标题: 水管工游戏 详情: 这小节有点难,看不太懂可以跳过哦. 最近小哼又迷上一个叫做水管工的游戏.游戏的大致规则是这样的.一块矩形土地被分为N*M的单位正方形,现在这块 ...
- 水管工游戏 (深搜)
水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...
- 啊哈算法之水管工游戏
先给不同状态的水管编给号吧 跟走迷宫一样的,深搜,每个dfs里遍历水管的状态,如果当前状态和水管指向的下一个状态能连通就深搜过去直到走到终点为止 上代码吧,这个代码是加强版,支持了更多的水管的编号,以 ...
- 深度搜索--水管工游戏
package com.xjj.Ah;import java.util.LinkedList;/*----深度搜索--水管工游戏----* 1. remove(),removeFirst():先移除在 ...
- 水管工游戏(随机地图版)
/*水管工游戏 一块快矩形的土地 被分成N*M的单位正方形 现在这个土地上已经买有一些水管 水管将从(1,1)的左上方 延伸到(N,M)d的矩形下方的右下角右部边缘 水管只有两种 &quo ...
- android自定义水管流动,Android水管工游戏的简单脚本
Unity3d脚本Android水管工游戏的简单脚本 using UnityEngine; using System.Collections; public class TestGoto : Mono ...
- 啊哈算法---水管工游戏
游戏大致规则是:一块矩形土地被分成N*M的单位正方形,现在这块土地已经埋设了一些水管. 水管将从矩形土地的左上角左部边缘,延伸到右下角右部边缘. 水管只有两种:弯管和直管 弯管有四种状态 直管有两种状 ...
- 杂谈:编程解决水管工游戏
杂谈:编程解决水管工问题 程序设计是一门极难上手的技能,仅仅凭着课堂上的知识,只能是熟悉一门编程语言的语法.但要是用计算机来解决一些实际的问题,哪怕是智力问题,课本上的知识是远远不够的. 编程就像学游 ...
最新文章
- LeetCode简单题之托普利茨矩阵
- Java中对比两个对象中属性值[反射、注解]
- 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)
- Java 设计模式之工厂模式(二)
- KubeVela 上手(1)|让云端应用交付更加丝滑
- 立足国产自主可控技术 达梦DM8数据库新品化繁为简
- 第37课 神奇的大自然 《小学生C++趣味编程》
- Django:ORM基本操作-CRUD,管理器对象objects,----->新增
- 二维叉乘求三角形面积_角形
- ios换肤思想,及工具类
- python官网下载-Python3.7.0 官方版官方版下载
- 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第二节「离散时间信号详解」2021-09-29
- Vue中引用图片动态背景图片
- 各种手机的User-Agent
- 感慨颇多:清华差生10年奋斗经历
- cent怎么读(centre怎么读)
- React 生成二维码
- Applications for PacBio circular consensus sequencing
- Matlab基础学习(中)
- Spring Boot配置Quartz定时任务
热门文章
- 问:平面布置图是什么?有什么作用?如何判断好的平面布置图方案?如何绘制?
- Tomcat、Servlet、JSP、EL和JDK版本对照以及各版本Tomcat下载
- URL Schemes 使用详解
- java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
- BitCoke测评报告 | TokenInsight
- Android 老生常谈之MVC与MVP
- LINQ SelectMany cannot be inferred from the usage. Try specifying the type arguments explicitly.
- 使用 IntraWeb (22) - 基本控件之 TIWCalendar
- 2022-2027年中国酒店及酒店管理市场竞争态势及行业投资前景预测报告
- STM32物联网项目-HMI串口屏