IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> P1228 地毯填补问题(Java语言实现) -> 正文阅读

[数据结构与算法]P1228 地毯填补问题(Java语言实现)

输入输出样例见原题链接:地毯填补问题 - 洛谷

这道题属于分治算法经典问题棋盘覆盖问题的衍生题。为了更好的讲解解题思路,在这里我将举一个例子,通过例子来说明,如下图,黑色方块为公主位置,其他颜色则为毛毯。

? ? ? ?

? ? ? ? 1,将大方块分成四小块,找到被公主覆盖的位置在哪个小块 。

????????2,在该小块顶角铺上填补此形状的毛毯,使公主不在的三个小方块各被覆盖一个位置。

? ? ? ? 3,进入公主所在的方块,重复上述操作。直到被填满。

? ? ? ? 4,由于公主不在的方块未被处理,且因为公主不在的三个方块被覆盖了一个位置,所以可以把毛毯覆盖的位置看做是公主所在的位置,重复上述操作,直到被填满。

??????

动态图演示

静态原图来源:

棋盘覆盖问题-分治法_死啦死啦滴的博客-CSDN博客_棋盘覆盖

接下来是Java代码,注意其中的细节


import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int k,x,y;
		k=sc.nextInt();
		x=sc.nextInt();
		y=sc.nextInt();
		fill(x,y,1,1,1<<k);//位运算,等同于2的k次方
		sc.close();
	}
	 static void fill(int x,int y,int dx,int dy,int len) {
		if(len==1) {
			return;
		}
		len>>=1;//等同于len÷=2
		//公主在左上
		 if(x-dx<len&&y-dy<len) {
			System.out.println((dx+len)+" "+(dy+len)+" "+1);
			fill(x,y,dx,dy,len);//公主所在区域继续分块
			fill(dx+len-1,dy+len,dx,dy+len,len);//右上进行分块
			fill(dx+len,dy+len-1,dx+len,dy,len);//左下进行分块
			fill(dx+len,dy+len,dx+len,dy+len,len);//右下进行分块
		}
		//公主在右上
		 else if(x-dx<len&&y-dy>=len) {
			System.out.println((dx+len)+" "+(dy+len-1)+" "+2);
			fill(x,y,dx,dy+len,len);//公主所在区域继续分块
			fill(dx+len-1,dy+len-1,dx,dy,len);//左上进行分块
			fill(dx+len,dy+len-1,dx+len,dy,len);//左下进行分块
			fill(dx+len,dy+len,dx+len,dy+len,len);//右下进行分块
		}
		//公主在左下
		 else if(x-dx>=len&&y-dy<len) {
			System.out.println((dx+len-1)+" "+(dy+len)+" "+3);
			fill(x,y,dx+len,dy,len);//公主所在区域继续分块
			fill(dx+len-1,dy+len-1,dx,dy,len);//左上进行分块
			fill(dx+len-1,dy+len,dx,dy+len,len);//右上进行分块
			fill(dx+len,dy+len,dx+len,dy+len,len);//右下进行分块
		}
		//公主在右下
		 else if(x-dx>=len&&y-dy>=len) {
			System.out.println((dx+len-1)+" "+(dy+len-1)+" "+4);	
			fill(x,y,dx+len,dy+len,len);//公主所在区域继续分块
			fill(dx+len-1,dy+len-1,dx,dy,len);//左上进行分块
			fill(dx+len-1,dy+len,dx,dy+len,len);//右上进行分块
			fill(dx+len,dy+len-1,dx+len,dy,len);//左下进行分块
		}
	}

}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:33:08  更:2022-02-24 15:33:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:59:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码