(C语言)P1002 [NOIP2002 普及组] 过河卒

news2025/1/14 17:59:39

[NOIP2002 普及组] 过河卒

一、题目描述

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

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

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

二、输入格式

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

三、输出格式

一个整数,表示所有的路径条数。

四、样例输入

6 6 3 3

五、样例输出

6

六、提示

对于 100 % 100 \% 100% 的数据, 1 ≤ n , m ≤ 20 1 \le n, m \le 20 1n,m20 0 ≤ 0 \le 0 马的坐标 ≤ 20 \le 20 20

七、代码

#include <stdio.h>
long long f1[40][40];
long long f2[40][40];
int n, m, a, b;
void sign(int x, int y) {
	f2[x][y] = 1;
	f2[x - 1][y - 2] = 1;
	f2[x - 1][y + 2] = 1;
	f2[x - 2][y - 1] = 1;
	f2[x - 2][y + 1] = 1;
	f2[x + 1][y + 2] = 1;
	f2[x + 1][y - 2] = 1;
	f2[x + 2][y + 1] = 1;
	f2[x + 2][y - 1] = 1;
}

int main() {
	scanf_s("%d%d%d%d", &n, &m, &a, &b);
	//标记一下马的位置
	sign(a , b);
	f1[1][0] = 1;
	for (int i = 1; i <= n+1; i++)
	{
		for (int j = 1; j <= m+1; j++)
		{
			f1[i][j] = f1[i - 1][j] + f1[i][j - 1];
			if (f2[i - 1][j - 1]) //如果被标记过,则赋值为0
			{
				f1[i][j] = 0;
			}
		}
	}
	printf("%ld",f1[n + 1][m + 1]);
}

八、思路

  • 首先我们将整个棋盘记作一个二维数组,注意二维数组的类型应当为长整型long long,否则可能会超出!
long long f1[40][40];
long long f2[40][40];
  • 由题意我们可以知道,马所在的点和马所有跳跃一步可达的点都是卒不可以走的点
  • 对此我们可以定义一个方法,利用已知的马走日的规律,将马所在的位置以及马可到达的位置,标记为1,方便后续操作
    在这里插入图片描述
void sign(int x, int y) {
	f2[x][y] = 1;
	f2[x - 1][y - 2] = 1;
	f2[x - 1][y + 2] = 1;
	f2[x - 2][y - 1] = 1;
	f2[x - 2][y + 1] = 1;
	f2[x + 1][y + 2] = 1;
	f2[x + 1][y - 2] = 1;
	f2[x + 2][y + 1] = 1;
	f2[x + 2][y - 1] = 1;
}
  • 准备工作做好了之后,就可以进入本题的核心部分啦,如何计算路径的条数呢?我们已经知道了要到达的B点的坐标,以及卒开始的位置(0,0),本题带有一点小学奥数题的味道了
  • 就以下图为例,假设只能向下向右走,计算节点A到达节点B有多少条路径,很显然有两条路径

在这里插入图片描述

  • 再以下图为例,假设只能向下向右走,计算节点1到达节点9有多少条路径,只需从节点2开始,依次计算并累加上一个节点到此节点的路径(图中红色数字就是到对应节点的路径条数;例如:节点1到5的路径条数=节点1到2的路径条数+节点1到3的路径条数)

在这里插入图片描述

  • 本题的思路与此思路相似,想知道到节点9的路径数,就需要知道到节点7和8的路径数,一步一步向前推,但注意:与此不同的是要去掉马所在的点和马所有跳跃一步可达的点,即将这些点标记出来,不去遍历这些点。
int main() {
	scanf_s("%d%d%d%d", &n, &m, &a, &b);
	//标记一下马的位置
	sign(a , b);
	f1[1][0] = 1;//表示初始的点,未被标记过
	for (int i = 1; i <= n+1; i++)//i从1开始,对应图的X坐标,X坐标最大为n+1
	{
		for (int j = 1; j <= m+1; j++)//j从1开始,对应图的Y坐标,Y坐标最大为m+1
		{
			f1[i][j] = f1[i - 1][j] + f1[i][j - 1];//当前遍历到的节点的路径数 = 此节点的左边节点路与上边节点的径数之和
			if (f2[i - 1][j - 1]) //如果被标记过,则赋值为0
			{
				f1[i][j] = 0;
			}
		}
	}
	printf("%ld",f1[n + 1][m + 1]);
}

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

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

相关文章

Redis实战——短信登录

目录 1 基于Seesion实现短信登录 1.1 发送短信验证码 1.2 登录功能 2 使用Redis进行短信验证码校验登录 2.1 Seesion方法存在的问题 2.2 发送短信验证码 2.3 验证码校验及登录功能 3.拦截器优化 1 基于Seesion实现短信登录 1.1 发送短信验证码 发送验证码请求路径 /u…

2、skywalking-安装(Docker-Compose方式)

1、服务器环境介绍 两台服务器均为Centos7.6 172.16.128.129 vm1 装载skywalking(采用es作为数据库) 172.16.128.130 vm2 项目服务器&#xff0c;然后向vm1集成 2、准备工作 2.1、由于安装skywalking是通过docker-compose方式安装在vm1且项目到时候是直接build成镜像然后发布&a…

行业安全解决方案 | 零售企业如何做好安全建设对抗黑灰产?

随着各行各业信息化、数字化、智能化进程不断加快&#xff0c;零售行业新业态也正在蓬勃发展。然而&#xff0c;随着转型深入推进及业务量的上升&#xff0c;随处可见的安全威胁逐渐成为零售企业的首要难题。 其主要原因在于该类企业一般涵盖大量用户个人数据&#xff0c;当企…

2022,软件测试行业岗位细分,薪资分布

软件测试是个需求多&#xff0c;就业机会大的职业。目前&#xff0c;我国具备软件测试能力的人员数量和市场需求相差巨大&#xff0c;巨大的市场空缺&#xff0c;使软件测试工程师从初级到高级&#xff0c;只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

图像基础知识、深度学习基础知识以及相关问题

疑难问题总结第一部分&#xff1a;图像基础边缘和轮廓1、图像中&#xff0c;什么是高频域和低频域&#xff1f;2、什么是图像轮廓&#xff0c;什么是图像边缘&#xff1f;第二部分&#xff1a;深度学习第一部分&#xff1a;图像基础 边缘和轮廓 1、图像中&#xff0c;什么是高…

从一座瑞典风机的倒塌看VDI2230用于螺栓连接精确计算的重要性

作者&#xff1a;螺栓设计老张 一、写在前面 引言&#xff1a;在机械行业&#xff0c;螺栓是与轴承、齿轮齐名的三大最主要机械元素&#xff0c;而从应用广泛程度来看&#xff0c;相比于轴承和齿轮是有过之而无不及。无论是机械传动还是机械结构&#xff0c;都离不开螺栓&…

[附源码]Python计算机毕业设计成绩管理与学情分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

WPS—JS宏笔记记录

前言&#xff1a;本方法需要一定的JS基础&#xff0c;这边不会赘述&#xff0c;0基础者可先自学JS 文章目录官方参考文档壹——excel表格篇一、创建新的表格输入内容并保存关闭ThisWorkbook&#xff1a;Application.Path:Workbooks:workbooks.Add:Sheets&#xff1a;自测&#…

OpenCV-Python小应用(五):基于模板匹配的图像拼接

OpenCV-Python小应用&#xff08;五&#xff09;&#xff1a;基于模板匹配的图像拼接前言前提条件实验环境基于模板匹配的图像拼接参考文献前言 本文是个人使用OpenCV-Python的应用案例&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容…

【微服务】分布式组件 Nacos 结合 Feign 的使用

本文主要介绍如何搭建分布式开发基本环境 一、基本概念 1. 注册中心 在分布式系统中&#xff0c;每一个微服务上线&#xff0c;都需要注册到注册中心。&#xff08;方便服务的远程调用&#xff0c;比如订单想调用商品服务&#xff0c;直接从注册中心获得&#xff09; 对应 Sp…

SpringBoot整合mybatis

SpringBoot整合mybatis 以tb_book表格为例&#xff1a; 第一步&#xff1a;创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 第二步&#xff1a;选择当前模块需要使用的技术集&#xff08;MyBatis、MySQL&#xff09; 或者手工导入对应技术的star…

idea创建纯净的maven项目简单的maven工程

idea创建简单的maven项目一、说在前面二、创建步骤一、说在前面 在学习或者开发中&#xff0c;有时候&#xff0c;我们只想创建一个简单的maven工程&#xff0c;不需要有太多的自带的配置或配置文件&#xff0c;本文结合这一需求&#xff0c;将创建步骤分享给大家&#xff0c;…

Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

1、UI测试框架搭建-目录结构 2、 文件介绍 2.1、baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数base_url "http://xxxxx.com" undirect_username "username" undirect_password "password" direct_…

想知道怎么给图片加贴纸?手把手教你给图片加贴纸

有时候我们在拍摄照片时&#xff0c;会不小心排到一些隐私的东西&#xff0c;这个时候该怎么办呢&#xff1f;可能很多人会先想到使用马赛克涂抹&#xff0c;这个方法确实好&#xff0c;但马赛克在帮我们遮挡的同时&#xff0c;也会影响到图片的整体观感。那我们应该用什么来代…

WebRTC Pacer

目录 一. 前言 二. WebRTC Pacer 1. 数据包传入Pacer模块的队列 2. Pacer模块取出队列的包发送 &#xff08;1&#xff09;什么时候取出数据包发送 &#xff08;2&#xff09;每次发送多少数据量 &#xff08;3&#xff09;避免引入较大延时的处理方法 一. 前言 实时音视…

@MapperScan 和 @Mapper 源码走读

一.从开发中遇到的问题开始 问题描述 : 在一个springbootmybatis的项目中,在dao也就是Mapper接口上配置了Mapper注解&#xff0c;其他同事在启动类还配置了MapperScan注解&#xff08;包扫描没有配全面&#xff09;&#xff0c;进行批量指定所生成的Mapper接口动态代理接口类&…

TFT-LCD移植LVGL详细过程记录

TFT-LCD移植LVGL LVGL(轻量级和通用图形库)是一个免费和开源的图形库&#xff0c;它提供了创建嵌入式GUI所需的一切&#xff0c;具有易于使用的图形元素&#xff0c;美丽的视觉效果和低内存占用。 LVGL更多介绍&#xff1a;https://zhuanlan.zhihu.com/p/406294618 本次实验…

第六章 图论 16 AcWing 1558. 加油站

第六章 图论 16 AcWing 1558. 加油站 原题链接 AcWing 1558. 加油站 算法标签 图论 最短路 枚举 思路 枚举加油站位置&#xff0c;对于每个加油站位置进行dijkstra&#xff0c;选择符合要求1的最小距离最大值&#xff08;要求2&#xff09;与的距离和最小值&#xff08;要…

(九)Java算法:快速排序(详细图解)

目录一、前言1.1、概念1.2、算法过程二、maven依赖三、流程解析3.1、全部数据分区3.2、左边数据分区3.3、右边数据分区四、编码实现结语一、前言 1.1、概念 快速排序&#xff1a;用数组的第一个数作为基准数据&#xff0c;然后将所有比它小的数都放到它左边&#xff0c;所有比…

使用 Spring Boot 设置 Hibernate Envers

Hibernate Envers是一个实现持久实体的审核和版本控制的模块。审计和版本控制是构建生产级Spring 启动微服务的关键组件。Hibernate Envers与Spring Boot无缝集成以实现相同的目标。 在这篇文章中&#xff0c;我们将在我们的Spring Boot Starter应用程序中集成Hibernate Envers…