棋盘覆盖问题算法分析,棋盘覆盖问题算法思路

  棋盘覆盖问题算法分析,棋盘覆盖问题算法思路

  主要介绍基于分治算法的ava实现的棋盘覆盖问题,简述棋盘覆盖问题,结合具体实例分析基于分治算法的java相关操作技巧。有需要的可以参考一下。

  分治算法是一种使用分治思想的算法。在了解棋盘问题之前,我们先来了解一下什么是各个击破。

  父问题分解成子问题,用同样的方法求解,这和递归的概念是一致的。所以分治算法通常采用递归实现(当然也有非递归实现)。分治算法的描述从字面上也很好理解。分治算法之间实际上有一个合并的过程:

  划分:递归解决较小的问题(停在末级或者可以解决的时候)征服:递归解决,问题足够小就直接解决。合并:建立子问题的解决方案。一般父问题的分治算法在文本中分解成两个或两个以上的递归调用,子类问题一般不想交叉(互不影响)。当解决一个规模较大的问题难以直接解决,而规模较小时,问题容易解决且问题满足分治算法的适用条件时,则可以使用分治算法。

  在由2^k * 2^k方格组成的棋盘中,一个方格与其他方格不同。如果用下面四张L型多米诺骨牌盖住除了这个特殊的方块以外的其他方块,如何盖住?四张L形多米诺骨牌如下:

  棋盘中的特殊方格如图所示:

  实现的基本原理是将一个2^k * 2k棋盘分成4个2 (2(k-1) * 2^(k-1)子棋盘,特殊方格必须在其中一个子棋盘中。如果特殊方格在某个子棋盘中,继续递归处理该子棋盘,直到子棋盘中只剩下一个方格。如果特殊方格不在某个子棋盘中,则将子棋盘中相应的位置设置为多米诺骨牌号码。上述原理如图所示:

  具体代码如下:

  包演示;

  公共级国际象棋{

  /*tr表示棋盘左上角的线数。

  Tc表示棋盘左上角的列号。

  Dr表示特殊棋盘的行号。

  Dc表示特定棋盘的列号*/

  公共静态空棋盘(int tr,int tc,int dr,int dc,int size){

  if(size==1) {

  返回;

  }

  int t=title

  int s=size/2;

  //覆盖左上棋盘

  if(dr tr s dc tc s) {

  //特殊的方块在这个棋盘里

  棋盘(tr,tc,dr,dc,s);

  }

  否则{

  //这个棋盘没有特别的方格。用T型L型多米诺骨牌盖住右下角。

  board[tr s-1][tr s-1]=t;

  //覆盖剩余的方块

  棋盘(tr,tc,tr s - 1,tc s - 1,s);

  }

  //覆盖右上棋盘

  if(dr tr s dc=tc s) {

  //特殊的方块在这个棋盘里

  棋盘(tr,tc s,dr,dc,s);

  }

  Else {//这个板子中午有一个特别的方块,用T型L型多米诺骨牌盖住左下角。

  board[tr s-1][TC s]=t;

  //覆盖剩余的方块

  棋盘(tr,tc s,tr s - 1,tc s,s);

  }

  //覆盖左下棋盘

  if(dr=tr s dc tc s) {

  //特殊的方块在这个棋盘里

  棋盘(tr s,tc,dr,dc,s);

  }

  否则{

  //这个棋盘没有特别的方格。用T型L型多米诺骨牌盖住右上角。

  board[tr s][tr s-1]=t;

  //覆盖剩余的方块

  棋盘(tr,tc,tr s,tc s - 1,s);

  }

  //覆盖右下角的子棋盘

  if(dr=tr s dc=tc s) {

  //特殊的方块在这个棋盘里

  棋盘(tr s,tc s,dr,dc,s);

  }

  Else {//这个棋盘没有特别的方格。用T型L型多米诺骨牌盖住左上角。

  board[tr s][TC s]=t;

  //覆盖剩余的方块

  棋盘(tr s,tc s,tr s,tc s,s);

  }

  }

  @SuppressWarnings(静态访问)

  公共静态void main(String args[]){

  System.out.println(测试结果:);

  board[2][2]=0;

  Chess ch=new Chess();

  栗色棋盘(0,0,2,2,大小);

  for(int I=0;I尺寸;i) {

  for(int j=0;j尺寸;j ) {

  system . out . print(Board[I][j] );

  }

  system . out . println();

  }

  }

  静态最终int size=4;

  静态int title=1;

  静态int Board[][]=new int[size][size];

  }运行结果:

  版权归作者所有:原创作品来自博主、程序员,转载授权请联系作者,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: