`
wujianjun0410
  • 浏览: 102190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Latin矩阵算法的Java实现

阅读更多
今天遇到一道算法题目,要求写出四阶拉丁矩阵中第一行为1,2,3,4的情形的其余三行的数,由于数目比较多,直接归纳写容易重复或者是遗忘,所以搞个程序输出就比较容易了。这个程序是我在网上找的例子后来又小改了下,贴出来备忘,呵呵
package com.test;
public class Latin {
    private final int n;
    private int[][] m;
    private int count = 0;
    
    public Latin(int n) {
        this.n = n;
        m = new int[n][n];
        fill(0);
    }
    
    public boolean check(int i, int j, int a) {
        for(int col=0; col<j; col++)
            if(m[i][col] == a) return false;
        for(int row=0; row<i; row++)
            if(m[row][j] == a) return false;
        return true;
    }
    
    public void fill(int i) {
        int row = i/n;
        int col = i%n;
        for(int a=1; a<=n; a++) {
            if(check(row, col, a)) {
                m[row][col] = a;
                if(i == n*n-1) {
                    count++;
                    System.out.println(count);
                    for(int[] line : m) {
                        for(int x : line)
                            System.out.print(x);
                        System.out.println();
                    }
                    System.out.println("********");
                }
                else fill(i+1);
            }
        }
    }
    
    public static void main(String[] args) {
        new Latin(4);
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics