13751652677 发表于 2016-9-6 19:20:06

3*3格列与行和为15的问题,为什么第二个方法不能正常运行


/**
* 和为15的棋盘游戏,要求从1到9的九个数不重复填入3*3棋盘的方格中。各行各列及对角线和为15,
* @author 刘焕濠
*
*/
public class GridGame {
       
        int[][] array;
        int count=1;
        public GridGame()
        {
                System.out.println("调用了构造函数");
                array=new int;
        }
        public void showGrid()
        {
                //System.out.println("调用了打印函数");
                int i,j;
                for(i=0;i<array.length;i++)
                {
                        for(j=0;j<array.length;j++)
                        {
                                System.out.print(array+" ");
                        }
                        System.out.println();
                }
                System.out.println();
        }
        //***********************************************************
       
       /** quetion:同样的实现原理,为什么用了for循环就执行错误?
       *
       *
       * */
        private boolean datachecksumrow()
       {
       int i,j,k=0;
       for(i=0;i<array.length;i++)
       {
       for(j=0;j<array.length;j++)
       k=k+array;
       if(k!=15)
       return false;
       }
       return true;
       }
       private boolean datachecksumcolumn()
       {
       int i,j,k=0;
       for(i=0;i<array.length;i++)
       {
       for(j=0;j<array.length;j++)
       k+=array;
       if(k!=15)
       return false;
       }
       return true;
       }
       private boolean dataCheck()
       {
       if(!datachecksumrow())
       return false;
       if(!datachecksumcolumn())
       return false;
       if(array+array+array!=15)
       return false;
       if(array+array+array!=15)
       return false;
       return true;
       }
        //*********************************************************8
        /*privateboolean dataCheck()
        {
                //System.out.println("调用了检查函数");
                int i,j,k=0;
                for(i=0;i<array.length;i++)
                {
                       
                        for(j=0;j<array.length;j++)
                        k+=array;
                        //System.out.println("k="+k);
                        if(k!=15)
                                return(false);
                }
               
                for(k=0,i=0;i<3;i++)
                {
                        for(j=0;j<3;j++)
                        k+=array;
                        if(k!=15)
                        {
                                return(false);
                        }
                }
                     if(array+array+array!=15)
                       return false;
                       if(array+array+array!=15)
                       return false;
                       if(array+array+array!=15)
                       return false;

                       if(array+array+array!=15)
                       return false;
                       if(array+array+array!=15)
                       return false;
                       if(array+array+array!=15)
                       return false;
                if((array+array+array)!=15)
                        return(false);
                if((array+array+array)!=15)
                        return(false);
                return(true);
        }*/
        public void arrage()
        {
                System.out.println("调用了穷举函数");
                int sum=1;
                for(int i=1;i<=9;i++)
                {
                        for(int j=1;j<=9;j++)
                        {
                                if(i==j)
                                        continue;
                                for(int k=1;k<=9;k++)
                                {
//                                        System.out.println("函数到达k这里");
                                        if(k==j||k==i)
                                                continue;
                                        for(int l=1;l<=9;l++)
                                        {
                                                if(l==k||l==j||l==i)
                                                        continue;
                                                for(int m=1;m<=9;m++)
                                                {
                                                        //System.out.println("函数到达k这里");
                                                        if(m==k||m==j||m==l||m==i)
                                                                continue;
                                                        for(int n=1;n<=9;n++)
                                                        {
                                                                if(n==k||n==m||n==j||n==l||n==i)
                                                                        continue;
                                                                for(int o=1;o<=9;o++)
                                                                {
                                                                        //System.out.println("函数到达o这里");
                                                                        if(o==n||o==m||o==j||o==i||o==l||o==k)
                                                                                continue;
                                                                        for(int p=1;p<=9;p++)
                                                                        {       
                                                                                //System.out.println("函数到达p这里");
                                                                                if(p==n||p==m||p==j||p==i||p==l||p==k||p==o)
                                                                                        continue;
                                                                                for(int q=1;q<=9;q++)
                                                                                {
                                                                                        if(q==n||q==m||q==j||q==l||q==i||q==k||q==o||q==p)
                                                                                                continue;
                                                                                        array=i;
                                                                                        array=j;
                                                                                        array=k;
                                                                                        array=l;
                                                                                        array=m;
                                                                                        array=n;
                                                                                        array=o;
                                                                                        array=p;
                                                                                        array=q;
                                                                                        //System.out.println("布局结束");
                                                                                        //showGrid();
                                                                                        if(dataCheck())
                                                                                        {
                                                                                                System.out.println("匹配成功");
                                                                                                System.out.println("=="+sum+"==");
                                                                                                sum++;
                                                                                                showGrid();
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
        public static void main(String[] args)
        {
                GridGame game=new GridGame();
                game.arrage();
                System.out.println("程序结束");
        }
}
















y=lnX 发表于 2016-9-7 09:49:16

{:10_249:}看你写的那么多层循环我都怕了 O(n^8)的算法

13751652677 发表于 2016-9-13 13:03:52

y=lnX 发表于 2016-9-7 09:49
看你写的那么多层循环我都怕了 O(n^8)的算法

{:5_91:}
页: [1]
查看完整版本: 3*3格列与行和为15的问题,为什么第二个方法不能正常运行