最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題示例

 更新時(shí)間:2017年11月23日 10:21:44   作者:萌神哆啦A夢  
這篇文章主要介紹了Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題,簡單描述了棋盤覆蓋問題,并結(jié)合具體實(shí)例形式分析了java基于分治算法實(shí)現(xiàn)棋盤覆蓋問題的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題。分享給大家供大家參考,具體如下:

在一個(gè)2^k * 2^k個(gè)方格組成的棋盤中,有一個(gè)方格與其它的不同,若使用以下四種L型骨牌覆蓋除這個(gè)特殊方格的其它方格,如何覆蓋。四個(gè)L型骨牌如下圖:

棋盤中的特殊方格如圖:

實(shí)現(xiàn)的基本原理是將2^k * 2^k的棋盤分成四塊2^(k - 1) * 2^(k - 1)的子棋盤,特殊方格一定在其中的一個(gè)子棋盤中,如果特殊方格在某一個(gè)子棋盤中,繼續(xù)遞歸處理這個(gè)子棋盤,直到這個(gè)子棋盤中只有一個(gè)方格為止如果特殊方格不在某一個(gè)子棋盤中,將這個(gè)子棋盤中的相應(yīng)的位置設(shè)為骨牌號(hào),將這個(gè)無特殊方格的了棋盤轉(zhuǎn)換為有特殊方格的子棋盤,然后再遞歸處理這個(gè)子棋盤。以上原理如圖所示:

具體代碼如下:

package demo;
public class Chess {
  /*tr表示棋盤左上角行號(hào)
  tc表示棋盤左上角列號(hào)
  dr表示特殊棋盤的行號(hào)
  dc表示特殊棋盤的列號(hào)*/
  public static void ChessBoard(int tr, int tc, int dr, int dc, int size) {
    if(size == 1) {
      return;
    }
    int t = title ++;
    int s = size/2;
    //覆蓋左上角子棋盤
    if(dr < tr + s && dc < tc +s) {
      //特殊方格在此棋盤中
      ChessBoard(tr, tc, dr, dc, s);
    }
    else {
      //此棋盤中無特殊方格,用t號(hào)L型骨牌覆蓋右下角
      Board[tr + s - 1][tr + s -1] = t;
      //覆蓋其余方格
      ChessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
    }
    //覆蓋右上角子棋盤
    if(dr < tr + s && dc >= tc + s) {
      //特殊方格在此棋盤中
      ChessBoard(tr, tc+s, dr, dc, s);
    }
    else {//此棋盤中午特殊方格,用t號(hào)L型骨牌覆蓋左下角
      Board[tr + s - 1][tc + s] = t;
      //覆蓋其余方格
      ChessBoard(tr, tc + s, tr + s - 1, tc + s, s);
    }
    //覆蓋左下角子棋盤
    if(dr >= tr + s && dc < tc +s) {
      //特殊方格在此棋盤中
      ChessBoard(tr + s, tc, dr, dc, s);
    }
    else {
      //此棋盤中無特殊方格,用t號(hào)L型骨牌覆蓋右上角
      Board[tr + s][tr + s -1] = t;
      //覆蓋其余方格
      ChessBoard(tr, tc, tr + s , tc + s - 1, s);
    }
    //覆蓋右下角子棋盤
    if(dr >= tr + s && dc >= tc + s) {
      //特殊方格在此棋盤中
      ChessBoard(tr + s, tc+s, dr, dc, s);
    }
    else {//此棋盤中無特殊方格,用t號(hào)L型骨牌覆蓋左上角
      Board[tr + s ][tc + s] = t;
      //覆蓋其余方格
      ChessBoard(tr + s, tc + s, tr + s , tc + s, s);
    }
  }
   @SuppressWarnings("static-access")
 public static void main(String args[]) {
     System.out.println("腳本之家測試結(jié)果:");
     Board[2][2] = 0;
     Chess ch = new Chess();
     ch.ChessBoard(0, 0, 2, 2, size);
     for(int i = 0; i < size; ++ i) {
       for(int j = 0; j < size; j++) {
         System.out.print(Board[i][j] + " ");
       }
       System.out.println();
     }
   }
  static final int size = 4;
  static int title = 1;
  static int Board[][] = new int[size][size];
}

運(yùn)行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    這篇文章主要介紹了Java SSM整合開發(fā)實(shí)現(xiàn)統(tǒng)一結(jié)果封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解Java設(shè)計(jì)模式之抽象工廠模式

    詳解Java設(shè)計(jì)模式之抽象工廠模式

    設(shè)計(jì)模式是軟件設(shè)計(jì)中的一種常見方法,通過定義一系列通用的解決方案,來解決常見的軟件設(shè)計(jì)問題,其中,抽象工廠模式是一種非常常見的設(shè)計(jì)模式,文中有詳細(xì)的代碼示例供大家參考,感興趣的同學(xué)可以借鑒閱讀
    2023-05-05
  • 如何利用NetworkInterface獲取服務(wù)器MAC地址

    如何利用NetworkInterface獲取服務(wù)器MAC地址

    今天介紹一種通用的跨平臺(tái)的操作方式,那就是JDK自帶的NetworkInterface接口,該接口在JDK1.4已經(jīng)出現(xiàn),但是功能比較少,JDK1.6之后新增了不少新功能,比較不錯(cuò)
    2013-08-08
  • 詳解Java多線程編程中CountDownLatch阻塞線程的方法

    詳解Java多線程編程中CountDownLatch阻塞線程的方法

    在Java中和ReadWriteLock.ReadLock一樣,CountDownLatch的本質(zhì)也是一個(gè)"共享鎖",這里我們就來詳解Java多線程編程中CountDownLatch阻塞線程的方法:
    2016-07-07
  • 一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用

    一文帶你學(xué)會(huì)規(guī)則引擎Drools的應(yīng)用

    Drools?就是一個(gè)開源的業(yè)務(wù)規(guī)則引擎,可以很容易地與?spring?boot?應(yīng)用程序集成,這篇文章就來和大家詳細(xì)聊聊Drools的具體應(yīng)用,需要的可以參考一下
    2023-03-03
  • JAVA編程實(shí)現(xiàn)TCP網(wǎng)絡(luò)通訊的方法示例

    JAVA編程實(shí)現(xiàn)TCP網(wǎng)絡(luò)通訊的方法示例

    這篇文章主要介紹了JAVA編程實(shí)現(xiàn)TCP網(wǎng)絡(luò)通訊的方法,簡單說明了TCP通訊的原理并結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)TCP通訊的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Java變量常量聲明和定義原理解析

    Java變量常量聲明和定義原理解析

    這篇文章主要介紹了Java變量常量聲明和定義原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    MyBatis深入解讀動(dòng)態(tài)SQL的實(shí)現(xiàn)

    動(dòng)態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一。如果你使用過 JDBC 或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接 SQL 語句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL,可以徹底擺脫這種痛苦
    2022-04-04
  • Java 高并發(fā)九:鎖的優(yōu)化和注意事項(xiàng)詳解

    Java 高并發(fā)九:鎖的優(yōu)化和注意事項(xiàng)詳解

    本文主要介紹Java高并發(fā)鎖的優(yōu)化和注意事項(xiàng),這里整理了詳細(xì)的資料,并講解了 1. 鎖優(yōu)化的思路和方法 2. 虛擬機(jī)內(nèi)的鎖優(yōu)化 3. 一個(gè)錯(cuò)誤使用鎖的案例 4. ThreadLocal及其源碼分析等知識(shí),有需要的小伙伴可以參考下
    2016-09-09
  • Idea創(chuàng)建springboot不能選擇java8的解決

    Idea創(chuàng)建springboot不能選擇java8的解決

    在IDEA 2023版本創(chuàng)建Spring Boot項(xiàng)目時(shí),發(fā)現(xiàn)沒有Java 8選項(xiàng),只有Java 17和Java 20,解決方法包括:通過修改服務(wù)器URL(推薦)或直接在創(chuàng)建后修改pom.xml文件中的Spring Boot和Java版本
    2025-01-01

最新評論

进贤县| 潢川县| 尉犁县| 浦江县| 邹平县| 南岸区| 察雅县| 双峰县| 治多县| 温泉县| 蓬安县| 全州县| 从江县| 岑溪市| 雷州市| 双城市| 舞阳县| 开平市| 永吉县| 定安县| 根河市| 林芝县| 綦江县| 芦溪县| 共和县| 庆云县| 长岛县| 太仆寺旗| 彭水| 紫金县| 呼图壁县| 正定县| 辰溪县| 黎川县| 正宁县| 邵阳市| 乐山市| 贵德县| 深州市| 连江县| 北海市|