趣味算法------过河卒

news2024/9/20 20:52:43

 

目录

​编辑

题目描述

解题思路

具体代码

总结

问题描述:

解决方案:

代码实现:

关键点:


题目描述


棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,A 点(0,0)  、B 点(n,m)​,同样马的位置坐标是需要给出的。


现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式
一行四个正整数,分别表示 B 点坐标和马的坐标。

输出格式
一个整数,表示所有的路径条数。

输入输出样例
输入 1
6 6 3 3
输出 1
6
输入 6 6 表示 B 点的坐标,3 3 表示马的坐标,输出 6 表示除去马的坐标以及所有跳跃一步可达的点,从 A 点出发到 B 点的所有的路径条数。

解题思路

        在解决这个问题之前我要先引入一个例子,假设小明站在二维坐标图的原点位置,并且一次只能走上右一格距离,并且已经走过的地方不能再走,而且只能走最短距离,那么他到(1,0),(0,1)方案肯定是1,那么(1,1)方案数就为2,由(1,1)再往外扩展的一个方案数就为3,是典型的动态规划问题。

        

代码的思路是使用动态规划来解决“马拦过河卒”问题。动态规划数组arr的大小为maxlen x maxlen,用于存储从起点(0,0)到棋盘上每个点的路径数量。

  1. 函数check_place用于检查给定的点(r, l)是否在马的控制范围内。马的移动方向由数组dir定义,包含了马的八个可能的移动方向。

  2. 初始化时,如果起点(0,0)不在马的控制范围内,则将arr[0][0]设置为1。

  3. 接着,对于起点行和列的其他点,如果不在马的控制范围内,也将相应的arr元素设置为1,这是因为卒可以直接从起点到达这些点。

  4. 对于棋盘上的其他点,卒可以通过向下或向右移动到达。如果当前点(i, j)不在马的控制范围内,则其路径数量为上一行对应点和左一列对应点路径数量之和,即arr[i][j] = arr[i - 1][j] + arr[i][j - 1]

  5. 最后,输出数组中目标点(M, N)的值,即为卒从起点到目标点的路径数量。

这种方法的时间复杂度为O(MN),空间复杂度为O(MN),其中M和N分别是棋盘的行数和列数。通过这种方式,代码能够计算出在马的控制下,卒从起点到目标点的所有可能路径的数量。

具体代码

#include<stdio.h>
#include<stdlib.h>
#define maxlen 100
int check_place(int r, int l, int h_r, int h_l)
{
	int dir[8][2] = { {2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2} };
	for (int i = 0; i < 8; i++)
		if ((dir[i][1] + h_l == l && dir[i][0] + h_r == r)||(r == h_r &&h_l == l))
			return 1;
	return 0;
}
int main(void)
{
	int arr[maxlen][maxlen] = { {1} };
	int M, N, m, n;
	scanf("%d%d%d%d", &M, &N, &m, &n);
	for (int i = 1; i <= N; i++)
	{
		if (!check_place(0, i, m,n))
			arr[0][i] = 1;
		else
			break;
	}
	for (int i = 1; i <= M; i++)
	{
		if (!check_place(i, 0, m,n))
			arr[i][0] = 1;
		else
			break;
	}
	for(int i = 1;i<=M;i++)
		for (int j = 1; j <= N; j++)
		{
			if (!check_place(i, j, m, n))
				arr[i][j] = arr[i - 1][j] + arr[i][j - 1];
		}
	printf("%d", arr[M][N]);


	return 0;

}

总结

问题描述:


在棋盘上,有一个过河卒从点A(0,0)出发,目标是到达点B(n,m)。过河卒可以向下或向右移动。棋盘上存在一个对方的马,位于点C。马及其控制的八个方向上的点被定义为“马的控制点”。任务是计算出卒从A点到达B点的路径数量,且这些路径不能经过马的控制点。

解决方案:

  1. 定义控制点: 马的控制点包括马所在位置及其八个方向上可以到达的点。通过一个辅助函数check_place判断任意点是否为控制点。
  2. 动态规划:
    • 初始化一个二维数组arr,其中arr[i][j]表示从A点到达(i,j)的路径数量。
    • 初始条件:arr[0][0] = 1,表示起点到自身的路径数量为1。
    • 对于第一行和第一列,如果不在马的控制点范围内,则arr[i][0]arr[0][j]的值为1,表示可以直接到达。
    • 通过动态规划递推公式arr[i][j] = arr[i-1][j] + arr[i][j-1]更新其他点的路径数量,前提是该点不在马的控制点范围内。
  3. 输出结果: 最终,arr[n][m]即为从A点到B点的路径数量。

代码实现:


使用C语言实现上述逻辑,通过check_place函数判断控制点,使用动态规划计算路径数量。

关键点:

  • 动态规划的递推关系和边界条件设置。
  • 识别并排除马的控制点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海外仓系统是什么?你想要了解的都在这里

对从事海外仓经营的人来说&#xff0c;海外仓系统肯定是不陌生的。但是对一些刚进入海外仓领域的货代代理&#xff0c;或一些家庭海外仓的经营者来说&#xff0c;还是有些糊涂&#xff0c;不知道自己到底要不要引入这样的管理系统&#xff0c;引入海外仓系统之后到底能帮自己做…

尚品汇-订单接口实现(四十)

目录&#xff1a; &#xff08;1&#xff09;搭建service-order-client模块 &#xff08;2&#xff09;微服务之间用户信息传递 &#xff08;3&#xff09;在web-all模块中添加接口 &#xff08;4&#xff09;下订单 &#xff08;1&#xff09;搭建service-order-client模…

DDD设计方法-1-初识DDD

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计理念-快速入门 DDD&#xff0…

雨水回用一体化设备

雨水回用一体化设备集提升、回用&#xff08;变频恒压供水&#xff09;、排泥系统&#xff1b;絮凝、消毒&#xff08;加药、紫外线&#xff09;、曝气系统&#xff1b;过滤&#xff08;初、精&#xff09;系统&#xff08;全自动自清洗过滤器/石英砂过滤器/多介质过滤器/精密碟…

没错,一分钟告诉你TCP和UDP之间的区别!

TCP (Transmission Control Protocol&#xff09;和UDP (User Datagram Protocol&#xff09;是两种常用的传输层协议&#xff0c;用于在计算机网络中传输数据。 TCP是一种面向连接的协议&#xff0c;提供可靠的数据传输。它通过建立连接、数据分段、流量控制、拥塞控制和错误校…

【论文阅读】skill code 和 one-shot manipulate

文章目录 1. Interpretable Robotic Manipulation from Language针对痛点和贡献摘要和结论引言模型框架实验思考不足之处 2. One-Shot Imitation Learning with Invariance Matching for Robotic Manipulation针对痛点和贡献摘要和结论引言模型框架实验 1. Interpretable Robot…

深入理解快排【C语言版】

目录 一、快排介绍及其思想 二、hoare版本 三、前后指针版 四、挖坑法 五、优化版本 5.1 三数取中 5.2 小区间优化 六 、非递归实现快排 七、三路划分 八、introsort 小结 一、快排介绍及其思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一…

掌握CompletableFuture,提升你的代码效率!

文章目录 1 CompletableFuture与线程池之间有什么关系&#xff1f;2 如何优化CompletableFuture的性能&#xff1f;3 实际项目中&#xff0c;以并行执行多个HTTP请求为例&#xff0c;你会如何优雅使用CompletableFuture 解决问题&#xff1f; 1 CompletableFuture与线程池之间有…

计算机毕业设计选题推荐-在线音乐网站-音乐专辑商城-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

埃隆·马斯克超级计算新里程碑:Cortex AI超级集群震撼亮相!

本周&#xff0c;科技界的超级明星埃隆马斯克再次引领潮流&#xff0c;他在超级计算领域的征途上迈出了令人瞩目的步伐。通过一段视频&#xff0c;他首次公开了最新命名的“Cortex”人工智能超级集群&#xff0c;这一壮举不仅标志着特斯拉“Giga Texas”工厂的又一次重大扩张&a…

LeetCode_sql_day17(1843.可疑银行账户)

描述&#xff1a; 表&#xff1a;Accounts ---------------------- | Column Name | Type | ---------------------- | account_id | int | | max_income | int | ---------------------- account_id 是这张表具有唯一值的列。 每行包含一个银行账户每月最大收入的…

提供开发资料 Hi3516CV610-00B/10B/20B/00S/20S/00G/20G 七个型号配置差异

根据功能不同&#xff0c; Hi3516CV610 分为七个不同型号版本: HI3516CV610-00B HI3516CV610-00B HI3516CV610-10B HI3516CV610-20B HI3516CV610-00S HI3516CV610-20S HI3516CV610-00G HI3516CV610-20G

【书生2.1】书生大模型全链路开源体系

0 引言 书生浦语官网 开源一周年总结及回顾 1 回顾 1.1 社区生态 2 总结 书生浦语大模型的开源开放体系&#xff0c;包括技术发展、性能提升、模型架构、开源生态等。 要点: &#x1f31f; 开源开放体系涵盖数据收集、标注、训练、微调、评测、部署等全链路。 &#x1f68…

【案例64】无法从套接字读取更多的数据

问题现象 系统突然间登录报如下错误&#xff1a;SELECT * FROM sm_user WHERE user_code_q? 无法从套接字读取更多的数据 问题分析 查看nc-log.log发现大量相关报错 $$callid1723104097968-1063 $$thread[http-bio-xxx-xxx-exec-xxx] $$hostxxx$$userid#UAP# $$tsxxx-08-08…

C++竞赛初阶L1-14-第六单元-数组(31~33课)542: T456472 数组逆序重存放

题目内容 将一个数组中的值按逆序重新存放。例如&#xff0c;原来的顺序为 8,6,5,4,1。要求改为 1,4,5,6,8。 输入格式 输入为两行&#xff1a;第一行数组中元素的个数 n&#xff08;1<n≤100)&#xff0c;第二行是 n 个整数&#xff0c;每两个整数之间用空格分隔。 输出…

Windows安装PostgreSQL数据库,保姆级教程

PostgreSQL 是客户端/服务器关系数据库管理系统 (RDMS)。PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统&#xff08;RDBMS&#xff09;。PostgreSQL 也有自己的查询语言&#xff0c;称为 pgsql。 此外&#xff0c;PostgreSQL 还支持过程语言&a…

Cesium模型封装-Point

一、初始化地图 <template><div class"cesium_map"><div id"cesiumContainer"></div></div> </template><script setup> import { reactive, ref, onMounted } from "vue"; import { Point } from &…

基于yolov8的安全帽反光衣护目镜检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的安全帽、反光衣及护目镜检测系统是一款集成了前沿深度学习与计算机视觉技术的智能监控系统。该系统利用YOLOv8这一尖端的目标检测模型&#xff0c;结合云计算与自动化图像处理技术&#xff0c;实现对工地、化工厂、煤矿等高风险作业区域工作人员安全…

Java—方法引用

目录 初识方法引用 方法引用的分类 引用静态方法 引用成员方法 引用构造方法 其它调用方式 类名引用成员方法 引用数组的构造方法 总结 初识方法引用 方法引用就是拿现有的方法来当做函数式接口中抽象方法的方法体。 方法引用注意事项 1. 引用处必须是函数式接口&a…

初识JAVA(上)

&#x1f381;&#x1f381;创作不易&#xff0c;关注作者不迷路&#x1f380;&#x1f380; 初识JAVA 前言一、初识JAVA1.1.Java是什么1.2.Java语言的重要性1.3 Java语言发展简史1.4 Java语言特性 二、初识Java的main方法1 main方法示例 三、注释基本规则 四、数据类型1.常量2…