9*9方格数独数字问题解答

近日,学校组织了一次软件设计大赛,题目是一道数独智力题,感觉还不错,现向大家分享一下。

数独是一个智力小游戏。一个9*9的棋盘,共有9行9列以及9个互不相交的3*3九宫格。里面某些格子开始已经填上了1-9中的一些数字。要求玩家在余下的空格中填上1-9中数字,使得每行,每列和每个3*3九宫格中都正好包含1-9数字各一个。数独游戏保证结果的存在和唯一性。

package game;

public class Game_3 {
//  存储字符
 private String s = "";
 // 要取的字符目录
 private static String c[] = {"1","2","3","4","5","6","7","8","9"};
 private static int flag=0;
 private static int max=9*8*7*6*5*4*3*2*1;
 private static String[] str=new String[max+1];
 private static String[][] arry=new String[9][9];
 public Game_3(){
  
 }
 public void show(int j, Game_3 t) {
  for (int i=0; i<c.length; i++) {
   if(!t.s.contains(c[i]))
    this.s = t.s + c[i];
   else
    continue;       
  if(j==1){
   str[flag]=this.s; 
   //System.out.println(str[flag]);
   flag++;
  }
  if((j-1!=0))
      new Game_3().show(j-1,this);
  else
   continue;
  }
 }
 public static void Flue(){
  int i,j,k,l,m,n,o,p,q;
  for(i=0;i<max;i++){
   Replace(0,arry,str[i]);
   for(j=0;j<max;j++){
    if(CompareTo(str[i],str[j])){
     Replace(1,arry,str[j]);
     if(Compare_Host_1_1(arry)){
      for(k=0;k<max;k++){
       if(CompareTo(str[i],str[k])&&CompareTo(str[j],str[k])){
        Replace(2,arry,str[k]);
        if(Compare_Host_1(arry)){
         for(l=0;l<max;l++){
          if(CompareTo(str[i],str[l])&&CompareTo(str[j],str[l])&&CompareTo(str[k],str[l])){
           Replace(3,arry,str[l]);
           for(m=0;m<max;m++){
            if(CompareTo(str[i],str[m])&&CompareTo(str[j],str[m])&&CompareTo(str[k],str[m])&&CompareTo(str[l],str[m])){
             Replace(4,arry,str[m]);
             if(Compare_Host_2_1(arry)){
              for(n=0;n<max;n++){
               if(CompareTo(str[i],str[n])&&CompareTo(str[j],str[n])&&CompareTo(str[k],str[n])&&CompareTo(str[l],str[n])&&CompareTo(str[m],str[n])){
                Replace(5,arry,str[n]);
                if(Compare_Host_2(arry)){
                 for(o=0;o<max;o++){
                  if(CompareTo(str[i],str[o])&&CompareTo(str[j],str[o])&&CompareTo(str[k],str[o])&&CompareTo(str[l],str[o])&&CompareTo(str[m],str[o])&&CompareTo(str[n],str[o])){
                   Replace(6,arry,str[o]);
                   for(p=0;p<max;p++){
                    if(CompareTo(str[i],str[p])&&CompareTo(str[j],str[p])&&CompareTo(str[k],str[p])&&CompareTo(str[l],str[p])&&CompareTo(str[m],str[p])&&CompareTo(str[n],str[p])&&CompareTo(str[o],str[p])){
                     Replace(7,arry,str[p]);
                     if(Compare_Host_3_1(arry)){
                      for(q=0;q<max;q++){
                       if(CompareTo(str[i],str[q])&&CompareTo(str[j],str[q])&&CompareTo(str[k],str[q])&&CompareTo(str[l],str[q])&&CompareTo(str[m],str[q])&&CompareTo(str[n],str[q])&&CompareTo(str[o],str[q])&&CompareTo(str[p],str[q])){
                        Replace(8,arry,str[q]);
                        if(Compare_Host_3(arry)){                                                  
                          Print_Arry(arry);                        
                        }                  
                       }
                      }
                     }                     
                    }
                   }
                  }
                 }
                }              
               }
              }
             }            
            }
           }
          }
         }
        }       
       }
      }
     }     
    }
   }
  }
 }

 public static boolean Compare_Host_1(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=0;i<3;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
    if(i>=0&&i<3&&j<3&&j>=0){
     if(!Compare_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=0&&i<3&&j<6&&j>=3){
     if(!Compare_2(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=0&&i<3&&j<9&&j>=6){
     if(!Compare_3(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }  
  return flag;
 }
 public static boolean Compare_Host_1_1(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=0;i<2;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
    if(i>=0&&i<2&&j<3&&j>=0){
     if(!Compare_1_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=0&&i<2&&j<6&&j>=3){
     if(!Compare_2_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=0&&i<2&&j<9&&j>=6){
     if(!Compare_3_1(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }
  return flag;
 }
 public static boolean Compare_Host_2(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=3;i<6;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
       if(i>=3&&i<6&&j<3&&j>=0){
     if(!Compare_4(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=3&&i<6&&j<6&&j>=3){
     if(!Compare_5(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=3&&i<6&&j<9&&j>=6){
     if(!Compare_6(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }
  return flag;
 }
 public static boolean Compare_Host_2_1(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=3;i<5;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
       if(i>=3&&i<5&&j<3&&j>=0){
     if(!Compare_4_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=3&&i<5&&j<6&&j>=3){
     if(!Compare_5_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=3&&i<5&&j<9&&j>=6){
     if(!Compare_6_1(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }
  return flag;
 }
 public static boolean Compare_Host_3(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=6;i<9;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
    if(i>=6&&i<9&&j<3&&j>=0){
     if(!Compare_7(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=6&&i<9&&j<6&&j>=3){
     if(!Compare_8(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=6&&i<9&&j<9&&j>=6){
     if(!Compare_9(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }
  return flag;
 }

 public static boolean Compare_Host_3_1(String[][] arry){
  int i,j;
  boolean flag=true;
  for(i=6;i<8;i++){
   if(flag==false){
    break;
   }
   for(j=0;j<9;j++){
    if(i>=6&&i<8&&j<3&&j>=0){
     if(!Compare_7_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=6&&i<8&&j<6&&j>=3){
     if(!Compare_8_1(arry[i][j])){
      flag=false;
      break;
     }
    }
    else if(i>=6&&i<8&&j<9&&j>=6){
     if(!Compare_9_1(arry[i][j])){
      flag=false;
      break;
     }
    }
   }
  }
  return flag;
 }

 public static boolean Compare_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<3;i++){
   for(j=0;j<3;j++){   
     if(r.equals(arry[i][j])){
      sign++;
     }         
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_1_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<2;i++){
   for(j=0;j<3;j++){   
     if(r.equals(arry[i][j])){
      sign++;
     }         
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_2(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<3;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++; 
    } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_2_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<2;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++; 
    } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_3(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<3;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
    
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_3_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=0;i<2;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
    
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_4(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<6;i++){
   for(j=0;j<3;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
    
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_4_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<5;i++){
   for(j=0;j<3;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
    
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_5(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<6;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_5_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<5;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_6(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<6;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_6_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=3;i<5;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_7(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<9;i++){
   for(j=0;j<3;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_7_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<8;i++){
   for(j=0;j<3;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_8(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<9;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_8_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<8;i++){
   for(j=3;j<6;j++){
     if(r.equals(arry[i][j])){
      sign++;
     }  
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_9(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<9;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static boolean Compare_9_1(String r){
  int i,j;
  int sign=0;
  boolean flag=true;
  for(i=6;i<8;i++){
   for(j=6;j<9;j++){
     if(r.equals(arry[i][j])){
      sign++;
     } 
   }
  }
  if(sign==1)flag=true;
  else flag=false;
  return flag;
 }
 public static void Replace(int sign,String[][] arry,String s){
  for(int i=0;i<9;i++){
   arry[sign][i]=String.valueOf(s.charAt(i));
  }
 }
 public static boolean CompareTo(String s1,String s2){
  boolean sign=true;
   for(int i=0;i<s1.length();i++){
    if(s1.charAt(i)==s2.charAt(i)){
     sign=false;
     break;
    }
   } 
  return sign;
 }
 public static void Print_Arry(String[][] arry){
  for(int i=0;i<arry.length;i++){
   for(int j=0;j<arry[i].length;j++){
    System.out.print(arry[i][j]+"  ");
   }
   System.out.println();
  }
  System.out.println();
  System.out.println();
  System.out.println();
 }
 public static void Copy(String[][] arry_1,String[][] arry_2){
  for(int i=0;i<arry_1.length;i++)
   for(int j=0;j<arry_1[i].length;j++)
    arry_2[i][j]=arry_1[i][j];
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new Game_3().show(9, new Game_3());
  Flue();
 }

}

转载于:https://www.cnblogs.com/bailong/archive/2011/05/29/2061869.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值