水淹七军(递归,又是递归)

北大2023级最强新生问我的,最后他的问题说是重写了一遍就解决了

乐死了,有的时候根本看不出源代码漏了哪里

我的思路是:

一个数组记录本次放水所经过的格子,经过的不再递归

一个数组记录地图上各地点的高度

一个数组记录地图上各地点被水淹过的高度(注意第三行)

开始递归前先判断这个放水点高度是否大于等于司令部所在地点的高度(高度相同也可以淹),和是否被水淹过

每递归一次,要判断是否到了司令部和是否超出边界以及司令部是不是已经被水淹了(算是剪枝)

还要判断这个地方水能不能漫延到(理所当然)

因为高度相同也可以淹,所以必须要多一个数组记录经过的格子

代码如下:

#include<stdio.h>
#include<stdlib.h>
void dg(int x, int y, int occ[201][201]);
int M, N, I, J, X, Y, jud = 0;//表示暂时还没被水淹
struct MAP{int h;//本来的高度int w_h;//后来的高度
}map[201][201];int main(void)
{int K, P;scanf("%d", &K);for(int k = 0; k < K; k++){jud = 0;//输入scanf("%d%d", &M, &N);for(int i = 1; i <= M; i++)for(int j = 1; j <= N; j++){scanf("%d", &map[i][j].h);map[i][j].w_h = map[i][j].h;}scanf("%d%d%d", &I, &J, &P);for(int i = 0; i < P; i++){scanf("%d%d", &X, &Y);int occ[201][201] = {0};if(map[X][Y].h >= map[I][J].h && map[X][Y].h == map[X][Y].w_h)dg(X, Y, occ);}if(jud)  printf("Yes\n");else  printf("No\n");}
}
void dg(int x, int y, int occ[201][201])
{if(occ[x][y])  return;if(x == I && y == J)  jud = 1;if(jud == 1)  return;if(x == 0 || y == 0 || x == M + 1 || y == N + 1)  return;if(map[X][Y].h < map[x][y].h)  return;map[x][y].w_h = map[X][Y].h, occ[x][y] = 1;dg(x + 1, y, occ), dg(x - 1, y, occ), dg(x, y + 1, occ), dg(x, y - 1, occ);return;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客 算法 HJ103 Redraiment的走法 golang语言实现

题目 HJ103 Redraiment的走法 实现 package mainimport ("bufio""fmt""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums : make([]int, 0)nums_len:0dp:make([]int, 0)for scanner.Scan()…

认识Linux操作系统

什么是操作系统&#xff1f; 操作系统是一款软硬件资源管理的软件Linux是一款具体的操作系统的品类&#xff08;Linux内核是用C语言写的&#xff09;centos7是一款具体的Linux操作系统 为什么要有操作系统&#xff1f; Linux操作系统 Linux是一种自由和开放源代码的类UNIX操…

极智项目 | 实战实时、多人2D人体姿态识别之OpenPose

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文来介绍 实战实时、多人2D人体姿态识别之OpenPose。 本文介绍的 实战实时、多人2D人体姿态识别之OpenPose&#xff0c;提供完整的可以一键执行的项目工程源码&…

物联网中基于信任的安全性调查研究:挑战与问题

A survey study on trust-based security in Internet of Things: Challenges and issues 文章目录 a b s t r a c t1. Introduction2. Related work3. IoT security from the one-stop dimension3.1. Output data related security3.1.1. Confidentiality3.1.2. Authenticity …

83基于matlab 的时钟时间识别GUI

基于matlab 的时钟时间识别GUI。图像去除背景-转化为二值化图像-找出对应的直线边缘-找到秒针、分针、时针对应的直线&#xff0c;并算出斜率、角度-判断时间&#xff0c;分针与时针 &#xff08;度数&#xff09;。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运…

Python潮流周刊:Twitter 的强敌 Threads 是用 Python 开发的!

&#x1f984;文章&教程 1、聊一聊 Python 和 Golang 的垃圾回收 常见的垃圾回收算法有哪些&#xff0c;它们的优缺点是什么&#xff1f;Python 的垃圾回收机制由什么组成&#xff0c;如何解决内存泄漏问题&#xff1f;Golang 的垃圾回收机制又是怎样的&#xff0c;如何解…

大数据 DataX-Web 详细安装教程

目录 一、DataX-Web 介绍 1.1 DataX-Web 是什么 1.2 DataX-Web 架构 二、DataX-Web 安装部署 2.1 环境要求 2.2 安装 2.3 部署 2.4 数据库初始化 2.5 配置 2.6 启动服务 2.6.1 一键启动所有服务 2.6.2 一键取消所有服务 2.7 查看服务&#xff08;注意&#xff01…

AtomicReference原子引用类-线程安全

简介与作用&#xff1a; AtomicReference是Java中的一个原子类&#xff0c;它的主要作用是提供了一种原子操作的方式来更新对象的引用。它通常用于多线程环境下&#xff0c;用来解决并发访问共享对象时可能出现的竞态条件问题。 &#xff08;实际开发中用于某个数据模型更新&a…

【pandas】数据透视表【pivot_table】

pivot_table pandas的pivot_table函数是一个非常有用的工具&#xff0c;用于创建一个数据透视表&#xff0c;这是一种用于数据总结和分析的表格形式。 以下是pivot_table的基本语法&#xff1a; pandas.pivot_table(data, valuesNone, indexNone, columnsNone, aggfuncmean,…

Python---函数的参数类型----位置参数(不能顺序乱)、关键词参数(键值对形式,顺序可乱)

位置参数 理论上&#xff0c;在函数定义时&#xff0c;可以为其定义多个参数。但是在函数调用时&#xff0c;也应该传递多个参数&#xff0c;正常情况&#xff0c;要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&#xff08;调用…

OpenCV- 学习笔记(Python)图像处理基础

本专栏&#xff1a;主要记录OpenCV&#xff08;Python&#xff09;学习笔记 OpenCV 图像处理基础 灰度图 import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline ​ imgcv2.imread(cat.jpg) img_gray…

Leetcode—94.二叉树的中序遍历【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—94.二叉树的中序遍历 C语言实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned array mus…