编程之美1.15构造数独---置换法java版

原创 2016年05月31日 21:43:37
脑筋急转弯一样的东西。。。
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Test;

/**
 *
 * @author Administrator
 */
public class SudokuDisplace {

    public static void main(String[] args) {
        int[][] shudu = new int[9][9];
        int[][] arr = {{3, 5, 8}, {7, 9, 4}, {1, 6, 2}};
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                shudu[i][j] = 0;
            }
        }
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                shudu[i + 3][j + 3] = arr[i][j];
            }
        }
        //置换行
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (i == 0) {
                    shudu[i + 3][j] =shudu[i+5][j+3];
                    shudu[i + 3][j + 6] = shudu[i+4][j+3];
                }

                if (i == 1) {
                    shudu[i + 3][j] = shudu[i+2][j+3];
                    shudu[i + 3][j + 6] = shudu[i+4][j+3];
                }

                if (i == 2) {
                    shudu[i + 3][j] = shudu[i+2][j+3];
                    shudu[i + 3][j + 6] = shudu[i+1][j+3];
                }

            }
        }
        //置换列
        for(int i=0;i<3;i++){
            for(int j =0;j<3;j++){
                if(j ==0){
                    shudu[i][j + 3] = shudu[i+3][j+5];
                    shudu[i + 6][j + 3] = shudu[i+3][j+4];
                    shudu[i][j]=shudu[i+3][j+2];
                    shudu[i+6][j]=shudu[i+3][j+1];
                    shudu[i][j+6]=shudu[i+3][j+8];
                    shudu[i+6][j+6]=shudu[i+3][j+7];
                }
                if (j == 1) {
                    shudu[i][j + 3] = shudu[i+3][j+2];
                    shudu[i + 6][j + 3] = shudu[i+3][j+4];
                    shudu[i][j] = shudu[i+3][j-1];
                    shudu[i+6][j]=shudu[i+3][j+1];
                    shudu[i][j+6]=shudu[i+3][j+5];
                    shudu[i+6][j+6]=shudu[i+3][j+7];
                }
                if (j == 2) {
                    shudu[i][j + 3] = shudu[i+3][j+2];
                    shudu[i + 6][j + 3] = shudu[i+3][j+1];
                    shudu[i][j] = shudu[i+3][j-1];
                    shudu[i+6][j]=shudu[i+3][j-2];
                    shudu[i][j+6]=shudu[i+3][j+5];
                    shudu[i+6][j+6]=shudu[i+3][j+4];
                }
            }
        }
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (j != 8) {
                    System.out.print(shudu[i][j] + "    ");
                } else {
                    System.out.println(shudu[i][j]);
                }

            }
        }
    }

}

编程之美1.15构造数独-----回溯法java版

完全根据书上给的思路用java写了一下假如程序进行到(1,7)时,可取的值只有一个list:4;在(1,7)的位置填上4,进行到(1,8),这是list=null,回溯到(1,7),list:4,进行...

编程之美 1.15 构造数独

法国使馆

编程之美1.15——构造数独

推荐http://blog.csdn.net/hustspy1990/article/details/7464698 http://blog.csdn.net/linyunzju/article/de...
  • hwltony
  • hwltony
  • 2013年08月26日 18:57
  • 537

编程之美:第一章 1.15构造数独

/* 构造数独: 数独的棋盘是由九九八十一个小方格组成的。玩家在每个小格子中,分别天上1至9的任意一个数字,让整个棋盘每一行,每一列,以及每一个3*3的小矩阵中的数字都不 重复。 使用一个二维数组来存...

[编程之美] PSet1.15 构造数独

问题: 构造一个9*9的方格矩阵,玩家要在每个方格中,分别填上1至9的任意一个数字, 让整个棋盘每一列、每一行以及每一个3*3的小矩阵中的数字都不重复。...

编程之美1.15节:构造数独算法-回溯法和置换法

1. 回溯法-程序 /**回溯法 * 生成数独矩阵 * From 编程之美1.15 */ #include #include /*要生成的数独矩阵个数*/ #define SUDOK...

POJ 2676 数独 && 编程之美1.15

算法讲解: low逼算法DFS,这里如果不用空间换时间会TLE 所以说我们加入三个判断矩阵 hang[x][i] 第x行有没有出现i lie[x][i] 第i列有没有出现i sq[x][y][i...

关于《编程之美》中构造数独问题的小结

数独是一个很有意思的游戏,我以前玩过很多次,但一直没想过自己写一个。 读《编程之美》在构造数独这一小节中,书中给我们两个算法,这两个算法都是用来初步生成一张初始的数独图。  回溯法和置换法。 对...

编程之美中构造数独例子

编程之美1.15构造数独 生成一个有效的数独矩阵,只生成一个,可以通过递归将所有有效矩阵都构造出来 #include #include #define NO_MOVE 0 #define A...

无限数独1.15

  • 2007年10月05日 13:49
  • 248KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程之美1.15构造数独---置换法java版
举报原因:
原因补充:

(最多只允许输入30个字)