【算法设计实验二】分治法解决棋盘覆盖问题

news2024/11/26 11:28:58

 

import java.util.*;

public class Main {
	
	static int cnt=0;
	
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		
		System.out.println("请输入棋盘边长大小!");
		int n=sc.nextInt();
		int[][] g=new int[n][n];
		System.out.println("请输入特殊方格坐标!");
		int sx=sc.nextInt(),sy=sc.nextInt();
        g[sx][sy]=-1;
		System.out.println("——————————————————————");
		System.out.println("初始棋盘如下:");
		printRes(g);
		
		chessBoard(g,0,0,sx,sy,n);
		
		System.out.println("——————————————————————");
		System.out.println("结果如下:");
		printRes(g);
	}
	
	/*
	 * tx 当前划分棋盘的最左上角方格的x坐标
	 * ty 当前划分棋盘的最左上角方格的y坐标
	 * sx 特殊方格x坐标
	 * sy 特殊方格y坐标
	 * size 棋盘大小
	 */
	public static void chessBoard(int[][] g,int tx,int ty,int sx,int sy,int size)
	{
		//棋盘为1×1时结束
		if(size==1) return;
		
		int curs=size/2; //划分棋盘
		int num=++cnt;  
		
		//左上角
		if(sx<tx+curs && sy<ty+curs) //如果特殊方块在左上角
			chessBoard(g,tx,ty,sx,sy,curs);
		else
		{
			g[tx+curs-1][ty+curs-1]=num; //如果特殊方格没在,则将靠近中心的方块标记
			chessBoard(g,tx,ty,tx+curs-1,ty+curs-1,curs); //并将标记方块作为特殊方块进行棋盘划分
		}
		
		//右上角
		if(sx<tx+curs && sy>=ty+curs) //如果特殊方块在右上角
			chessBoard(g,tx,ty+curs,sx,sy,curs);
		else
		{
			g[tx+curs-1][ty+curs]=num; //如果特殊方格没在,则将靠近中心的方块标记
			chessBoard(g,tx,ty+curs,tx+curs-1,ty+curs,curs); //并将标记方块作为特殊方块进行棋盘划分
		}
		
		//左下角
		if(sx>=tx+curs && sy<ty+curs) //如果特殊方块在左下角
			chessBoard(g,tx+curs,ty,sx,sy,curs);
		else
		{
			g[tx+curs][ty+curs-1]=num; //如果特殊方格没在,则将靠近中心的方块标记
			chessBoard(g,tx+curs,ty,tx+curs,ty+curs-1,curs); //并将标记方块作为特殊方块进行棋盘划分
		}
		
		//右下角
		if(sx>=tx+curs && sy>=ty+curs) //如果特殊方块在右下角
			chessBoard(g,tx+curs,ty+curs,sx,sy,curs);
		else
		{
			g[tx+curs][ty+curs]=num; //如果特殊方格没在,则将靠近中心的方块标记
			chessBoard(g,tx+curs,ty+curs,tx+curs,ty+curs,curs); //并将标记方块作为特殊方块进行棋盘划分
		}
				
	}
	
	public static void printRes(int[][] g)
	{
		for(int[] x:g)
		{
			for(int i:x)
				System.out.print(i+" ");
			System.out.println();
		}
	}
	

}

 

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

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

相关文章

word图片的标题跑到了图片的上方。

问题描述&#xff1a;在写论文时&#xff0c;在word文档中插入了一个svg图片&#xff0c;然后在图片下方输入标题。后面可能是调整了svg图片的大小&#xff0c;标题跑到了图片的上方。 具体情况如下图所示。标题明显跑到了图片的上方。 解决办法&#xff1a;把svg图片格式调成…

RTC实时时钟——DS1302

DS1302目录 一、DS1302简介引脚定义与推荐电路 二、芯片手册1.操作寄存器的定义2.时序定义dc1302.cds1302.h 三、蓝桥杯实践 一、DS1302简介 RTC(Real Time Clock):实时时钟&#xff0c;是一种集成电路&#xff0c;通常称为时钟芯片。现在流行的串行时钟电路很多&#xff0c;如…

[java进阶]——方法引用改写Lambda表达式

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 &#x1f4d5;概念介绍&#xff1a; ⭐方法引用的前提条件&#xff1a; 1.引用静态方法 2.引用构造方法 ①类的构造&#xff1a; ②数组的构造&#xff1a; 3.引用本类或父类的成员方法 ①本类&#xff1…

深入理解ClickHouse跳数索引

一、跳数索引​ 影响ClickHouse查询性能的因素很多。在大多数场景中&#xff0c;关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此&#xff0c;选择适用于最常见查询模式的主键对于表的设计至关重要。 然而&#xff0c;无论如何仔细地调优主键&#xff…

深度图(Depth Map)

文章目录 深度图深度图是什么深度图的获取方式激光雷达或结构光等传感器的方法激光雷达RGB-D相机 双目或多目相机的视差信息计算深度采用深度学习模型估计深度 深度图的应用场景扩展阅读 深度图 深度图是什么 深度图&#xff08;depth map&#xff09;是一种灰度图像&#xf…

Windows 10 启用 Hyper-V

文章目录 Windows 10 启用 Hyper-V打开控制面板打开任务管理器 Windows 10 启用 Hyper-V 打开控制面板 打开程序和功能 启用或关闭Windows功能 立即重启 打开任务管理器 出现下图&#xff0c;代表已启用

医院pacs系统是什么?

医院pacs系统是什么&#xff1f; PACS系统的概念已从原来将数字化的医学影像通过网络传送到连接在网络上的影像显示工作站上作一般显示和进行数字化存储&#xff0c;发展成为以数字化诊断&#xff08;无纸化、无胶片化&#xff09;为核心的整个影像管理过程&#xff0c;包括&a…

2023/11/7 JAVA学习

ctrl alt t自动重写

Selenium爬取内容并存储至MySQL数据库

前面我通过一篇文章讲述了如何爬取博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的。这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段…

MAC设备(M1)环境下编译安装openCV for Java

最近发现一个需求&#xff0c;可以用openCV来实现&#xff0c;碰巧又新买了mac笔记本&#xff0c;就打算利用业余时间安装下openCV。这里将主要步骤记录下&#xff0c;希望能帮助有需要的人。 1、准备编译环境 #查询编译opencv相关依赖 brew info opencv查询结果如下图所示&a…

css排版—— 一篇优雅的文章(中英文) vs 聊天框的特别排版

文章 <div class"contentBox"><p>这是一篇范文——仅供测试使用</p><p>With the coming of national day, I have a one week holiday. I reallyexpect to it, because it want to have a short trip during these days. Iwill travel to Ji…

结合双向LSTM和注意力机制的DQN-CE算法船舶能量调度

Title:Ship Energy Scheduling with DQN-CE Algorithm Combining Bi-directional LSTM and Attention Mechanism 【Applied Energy】结合双向LSTM和注意力机制的DQN-CE算法船舶能量调度(中科院1区Top,IF 11.2) 具体实现方法可以参考原文:论文地址 欢迎大家引用和交流,具体…

如何在在线Excel文档中规范单元格输入

在日常的工作中&#xff0c;我们常常需要处理大量的数据。为了确保数据的准确性和可靠性。我们需要对输入的数据进行规范化和验证。其中一个重要的方面是规范单元格输入。而数据验证作为Excel中一种非常实用的功能&#xff0c;它可以帮助用户规范单元格的输入&#xff0c;从而提…

学习日记01——JS基础01

JavaScrip简单介绍 是前端脚本语音&#xff0c;快速入门js基本语法&#xff0c;本篇文章涉及到JavaScrip基础的变量定义&#xff0c;数据类型和基础的流程控制语句。 使用到的工具 1&#xff0c;vscode 2&#xff0c;chrome浏览器 js的变量定义 准备工作&#xff08;简单的h…

【论文阅读】Progressive Spatio-Temporal Prototype Matching for Text-Video Retrieval

资料链接 论文链接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Li_Progressive_Spatio-Temporal_Prototype_Matching_for_Text-Video_Retrieval_ICCV_2023_paper.pdf 代码链接&#xff1a;https://github.com/imccretrieval/prost 背景与动机 文章发…

HTML使用canvas绘制海报(网络图片)

生成前&#xff1a; 生成后&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>媒体参会嘉宾邀请函生成链接</title><link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/vant2.10…

矩阵键盘独立接口设计(Keil+Proteus)

前言 实验&#xff1a;通过4*4的矩阵键盘&#xff0c;按下某个按钮之后会在数码管上面显示对应的键号。&#xff08;0~F&#xff09; 基础操作参考这篇博客&#xff1a; LED数码管的静态显示与动态显示&#xff08;KeilProteus&#xff09;-CSDN博客https://blog.csdn.net/w…

maven 上传本地jar包到nexus

maven上传命令 mvn deploy:deploy-file -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4 -Dversion4.0 -Dpackagingjar -DfileC:\java\top-sdk-java-1.0.1-lib\lib\bcprov-jdk16-1.46.jar -Durlhttp://ip:port/repository/maven-releases/ -DrepositoryIdsnapshot…

一个Linux自动备份脚本的示例

一个简单的Linux自动备份脚本的示例&#xff0c;根据需要进行自定义&#xff1a; 请确保按照您的需求修改source_dir和backup_dir为要备份的源目录和备份目录的路径。此脚本使用tar命令创建一个以当前日期命名的压缩备份文件&#xff0c;并在备份完成后检查是否成功。此外&…

vite基础学习笔记:13.Dialog 对话框 (用户注册与登录)

说明&#xff1a;自学做的笔记和记录&#xff0c;如有错误请指正 1. Dialog 对话框组件 目标效果&#xff1a;点击“登录/注册”&#xff0c;弹框 &#xff08;1&#xff09;创建全局组件&#xff0c;在官网中查询代码粘贴 &#xff08;2&#xff09; 注册和使用全局组件 &a…