9*9方格数独数字问题解答
时间:2011-05-29 来源:白龙龙
近日,学校组织了一次软件设计大赛,题目是一道数独智力题,感觉还不错,现向大家分享一下。
数独是一个智力小游戏。一个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();
}
}