日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

P1228 地毯填补问题(Java语言实现)

發布時間:2024/3/13 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);//左下進行分塊}}}

總結

以上是生活随笔為你收集整理的P1228 地毯填补问题(Java语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。