九宫格(只针对行列)--穷举法

package cn.edu.csu;

public class Grid99 {
//    private static String[] str = new String[362880];
//    private static int i = 0;
    /**
     * @param args
     * 得到所有行不相同的序列
     */
    public String[] creatDifString(){
     int k1, k2, k3, k4, k5, k6, k7, k8, k9;     
     String[] str = new String[362880];
     int i = 0;
        for(k1 = 1; k1 <= 9; k1++){         
          for(k2 =1; k2 <= 9; k2++){
              if(k2 ==k1){
                  continue;
              }             
              for(k3 = 1; k3 <= 9; k3++){
                  if(k3 ==k1 ||k3 ==k2){
                       continue;
                  }
                  for(k4 = 1; k4 <=9; k4++){
                      if(k4 == k1 ||k4 ==k2 ||k4==k3){
                          continue;
                      }
                      for(k5 = 1; k5 <=9; k5++){
                          if(k5 == k1 ||k5 == k2 ||k5 ==k3 ||k5 ==k4){
                              continue;
                          }
                          for(k6 = 1; k6<=9; k6++){
                              if(k6 == k1 || k6 == k2 || k6 ==k3 ||k6 ==k4 ||k6 ==k5){
                                  continue;
                              }
                              for(k7 = 1; k7 <=9; k7++){
                                  if(k7 ==k1 || k7 == k2 || k7 == k3 || k7 ==k4 || k7 ==k5 ||k7 == k6){
                                      continue;
                                  }
                                  for(k8 = 1; k8 <= 9; k8++){
                                      if(k8 == k1 ||k8 ==k2 || k8 == k3 ||k8 ==k4 ||
                                          k8 == k5 || k8 == k6 || k8 == k7){
                                          continue;
                                      }
                                      for(k9 = 1; k9 <= 9; k9++){
                                          if(k9 == k1 || k9 == k2 || k9 == k3 || k9 == k4 ||
                                             k9 == k5 || k9 == k6 || k9 == k7 || k9 == k8){
                                              continue;
                                          }
                                          str[i] = String.valueOf(k1) + String.valueOf(k2) + String.valueOf(k3) +
                                                   String.valueOf(k4) + String.valueOf(k5) + String.valueOf(k6) +
                                                   String.valueOf(k7) + String.valueOf(k8) + String.valueOf(k9);
                                          i++;
                                      }
                                  }
                              }
                          }
                      }
                   }
               }
           }
        }
        return str;
    }
   
   
   
    public boolean getDifString(String str1, String str2, String str3, String str4, String str5,
                                             String str6, String str7, String str8, String str9){
        boolean flag = true;
        String[] newstr = new String[9];
        /**
         * 按列组成九个字符串
         */
        for(int i = 0; i < 9; i++){
            char[] ch = {str1.charAt(i) , str2.charAt(i) , str3.charAt(i) , str4.charAt(i) ,
                         str5.charAt(i) , str6.charAt(i) , str7.charAt(i) , str8.charAt(i) , str9.charAt(i)};
            newstr[i] = new String(ch);
        }   
        for(int i = 0; i < 9; i++){
            if(ColumnHasSame(newstr[i])){
                flag = false;
                break;
            }
        }
        return flag;
    }
   
    public boolean ColumnHasSame(String str){
        boolean flag = false;
        out:
        for(int i = 0; i < str.length() - 1; i++){
            for(int j = i + 1; j < str.length(); j++){
                if(str.charAt(i) == str.charAt(j)){
                    flag = true;
                    break out;
                }
            }
        }
        return flag;
    }
   
    public static void main(String[] args){
        String[] str = new Grid99().creatDifString();
        int N = 326880;
        int M = 1 , num = 1;
        int k1, k2, k3, k4, k5, k6, k7, k8, k9;
        out:
        for(k1 = 0; k1 < N; k1++){
            for(k2 =0; k2 < N; k2++){
                  if(k2 == k1){
                      continue;
                  }             
                  for(k3 = 0; k3 < N; k3++){
                      if(k3 ==k1 ||k3 ==k2){
                           continue;
                      }
                      for(k4 = 0; k4 < N; k4++){
                          if(k4 == k1 ||k4 ==k2 ||k4==k3){
                              continue;
                          }
                          for(k5 = 0; k5 < N; k5++){
                              if(k5 == k1 ||k5 == k2 ||k5 ==k3 ||k5 ==k4){
                                  continue;
                              }
                              for(k6 = 0; k6< N; k6++){
                                  if(k6 == k1 || k6 == k2 || k6 ==k3 ||k6 ==k4 ||k6 ==k5){
                                      continue;
                                  }
                                  for(k7 = 0; k7 < N; k7++){
                                      if(k7 ==k1 || k7 == k2 || k7 == k3 || k7 ==k4 || k7 ==k5 ||k7 == k6){
                                          continue;
                                      }
                                      for(k8 = 0; k8 < N; k8++){
                                          if(k8 == k1 ||k8 ==k2 || k8 == k3 ||k8 ==k4 ||
                                              k8 == k5 || k8 == k6 || k8 == k7){
                                              continue;
                                          }
                                          for(k9 = 0; k9 < N; k9++){
                                              if(k9 == k1 || k9 == k2 || k9 == k3 || k9 == k4 ||
                                                 k9 == k5 || k9 == k6 || k9 == k7 || k9 == k8){
                                                  continue;
                                              }
                                              if(num >M){
                                                  break out;
                                              }
                                              if(new Grid99().getDifString(str[k1], str[k2], str[k3], str[k4], str[k5],
                                                                           str[k6], str[k7], str[k8], str[k9])){
                                                System.out.println("这是第" + num + "组符合要求的数");
                                                System.out.println(str[k1]);
                                                System.out.println(str[k2]);
                                                System.out.println(str[k3]);
                                                System.out.println(str[k4]);
                                                System.out.println(str[k5]);
                                                System.out.println(str[k6]);
                                                System.out.println(str[k7]);
                                                System.out.println(str[k8]);
                                                System.out.println(str[k9]);       
                                                num++;
                                              }                                             
                                          }
                                      }
                                  }
                              }
                          }
                       }
                   }
               }
            }
        System.out.println("程序退出");
        }
    }                                 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值