最近老师布置了一个思考题,要我们设计一个九宫格。思考良久,未果。
望哪位仁兄能帮小弟解答一下。
有源代码最佳

解决方案 »

  1.   

    class aa {
        public aa() {
        }    public static void main(String[] args) {
            aa nine15 = new aa();
            nine15.makeMatrix();
        }
        private boolean test(int[][] m){
            int sums[] = {0,0,0};
            boolean finishes[] = {true, true, true};
            for(int j=0; j<3; j++){
                int sum = 0;
                boolean finished = true;
                for(int i=0; i<3; i++){
                    sum+= m[j][i];
                    sums[i] += m[j][i];
                    if(m[j][i]==0){
                        finished = false;
                        finishes[i] = false;
                    }
                }
                if(sum>15){
                    return false;
                }
                if(finished&&sum!=15){
                    return false;
                }
            }
            if(sums[0]>15||sums[1]>15||sums[2]>15){
                return false;
            }
            if(finishes[0]&&sums[0]<15){
                return false;
            }
            if(finishes[1]&&sums[1]<15){
                return false;
            }
            if(finishes[2]&&sums[2]<15){
                return false;
            }
            int s1 = m[0][0]+m[1][1]+m[2][2];
            if(s1>15){
                return false;
            }
            if(m[0][0]>0&&m[1][1]>0&&m[2][2]>0&&s1<15){
                return false;
            }
            int s2 = m[0][2]+m[1][1]+m[2][0];
            if(s2>15){
                return false;
            }
            if(m[0][2]>0&&m[1][1]>0&&m[2][0]>0&&s2<15){
                return false;
            }
            return true;
        }    private void print(int[][] m){
            for(int j=0; j<3; j++){
                for(int i=0; i<3; i++){
                    System.out.print("\t"+m[j][i]);
                }
                System.out.println();
            }
        }    private void makeMatrix() {
            int m[][] = new int[3][3];
            int p=0;
            int v=9;
            int pv[] = new int[10];
            while(v>0){
                if(p==9){
                    ++v;
                    if(v==10){
                        break;
                    }
                    p=pv[v];
                    int rr = p/3;
                    int cc = p%3;
                    m[rr][cc] = 0;
                    pv[v] = 0;
                    p++;
                    continue;
                }
                int r = p/3;
                int c = p%3;
                if(m[r][c]>0){
                    p++;
                    continue;
                }
                m[r][c] = v;
                if(test(m)){
                    if(v>1){
                        pv[v] = p;
                        v--;
                        p = 0;
                    }else{
                        System.out.println("=======");
                        print(m);
                        m[r][c] = 0;
                        p++;
                    }
                }else{
                    m[r][c] = 0;
                    p++;
                }
            }
        }
    }
      

  2.   

    http://youzi530.blog.163.com/blog/
    幻方阵!?
      

  3.   

    public class TestNine{
    public static void main(String[] args){

    int n=9;
    if(n%2==0){
    System.out.println("Error!");
    System.exit(0);
    }

    int[][] data=new int[n][n];
             int row=0,col=n/2;
    for(int i=1;i<=n*n;i++){
    data[row][col]=i;
    row--;
    col++;
    if (row==-1 && col<n){
    row=n-1;
    }
    if (row>=0 && col==n){
    col=0;

    if ( (row==-1 && col==n)  || data[row][col]!=0) {
    row+=2;
    col--;
    }
    /*
    if (data[row][col]!=0){
    row+=2;
    col--;
    }
    */


    }

    for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
    System.out.print(data[i][j]+"  ");
    }
    System.out.println();
    }

    }
    }