九宫格的解法以---之随机九宫格的产生

来源:互联网 发布:生日网站源码 编辑:程序博客网 时间:2024/05/16 12:37

   下面是九宫格类型题目的第一篇 即最简单的九宫格的产生(此篇为在JAVA中编译的

import java.util.Random;    //九宫格类的初始化class JiuGong{      int [][]qiBan=new int[9][9];        public JiuGong(){                    for(int i=0;i<9;i++){              for(int j=0;j<9;j++){                  qiBan[i][j]=0;              }          }                 qiBan[0][suiji()]=1;          for(int i=2;i<10;i++){              int a=suiji();              while(qiBan[0][a]!=0){                  a=suiji();              }              qiBan[0][a]=i;          }               int x=1,y=0;          do{              qiBan[x][y]++;             if(qiBan[x][y]==10){                  qiBan[x][y]=0;                y--;                  if(y<0){                                         x--;                      y=8;                  }                  continue;              }                    if(yanZheng(x,y,qiBan[x][y])){                  y++;                  if(y==9){                      x++;y=0;                  };            }          }while(x<9);                 }  //下面为输出九宫格:    public void show(){        System.out.println("--------------------------");          for(int i=0;i<9;i++){              for(int j=0;j<9;j++){                  System.out.print(qiBan[i][j]+"| ");                  if(j==8) {                System.out.println("");                System.out.println("--------------------------");                  }            }          }      }            private int suiji(){        Random random = new Random();          random.nextInt(20);          return random.nextInt(9);      }   //下一段为验证在横 竖 斜的是否为 0~9 不重复          private Boolean yanZheng(int x,int y,int value){         for(int i=0;i<9;i++){              if(i==y) continue;              if(qiBan[x][i]==value) return false;                       }          for(int i=0;i<9;i++){              if(i==x) continue;              if(qiBan[i][y]==value) return false;         }          int n=x/3;        int m=y/3;        for(int i=n*3;i<3*(n+1);i++){              for(int j=m*3;j<3*(m+1);j++){                  if(x==i&&y==j) continue;                  if(qiBan[i][j]==value) return false;              }          }          return true;      }  }  

):


 下面是测试代码:


public class Example {public static void main(String[] args) {// TODO 自动生成的方法存根long t=System.currentTimeMillis();System.out.println("开始产生一个九宫格: ");JiuGong m=new JiuGong();m.show();long t2=System.currentTimeMillis();System.out.println("产生这个九宫格花了"+(t2-t)+"毫秒");}}






0 0
原创粉丝点击