日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java数独最快解_[分享]数独的JAVA解法

發布時間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数独最快解_[分享]数独的JAVA解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

package sodoku.puzzler;

/**

* 求解Sodoku Puzzler的工具類

* @author Eastsun

*/

public class Solver{

protected static final int SIZE = Puzzler.SIZE;

//避免生成該類實例

protected Solver(){

}

public static boolean solve(Puzzler p){

int[][] num =new int[SIZE][SIZE];

boolean[][] rFlags =new boolean[SIZE][SIZE+1],

cFlags =new boolean[SIZE][SIZE+1],

zFlags =new boolean[SIZE][SIZE+1];

for(int r=0;r

for(int c=0;c

if(p.isFixed(r,c)){

int t =p.getNumber(r,c);

num[r][c] =t;

rFlags[r][t] =true;

cFlags[c][t] =true;

zFlags[r/3*3+c/3][t] =true;

}

int r =0,c =0;

outLoop:

for(;;){//

if(p.isFixed(r,c)){

c ++;

if(c>=SIZE){

c =0;

r ++;

if(r>=SIZE) break outLoop;

}

continue outLoop;

} //if(p.isFixed())

int t =SIZE;

for(c++;;){//

if(t>=SIZE){

c --;

if(c<0){

c =SIZE -1;

r --;

if(r<0) break outLoop;

}

if(p.isFixed(r,c)) continue;

t =num[r][c];

if(t!=0){

rFlags[r][t] =false;

cFlags[c][t] =false;

zFlags[r/3*3+c/3][t] =false;

num[r][c] =0;

}

} else{

t ++;

if(!(rFlags[r][t]||

cFlags[c][t]||

zFlags[r/3*3+c/3][t])

) break;

}

}//for(c++;;);

num[r][c] =t;

rFlags[r][t] =true;

cFlags[c][t] =true;

zFlags[r/3*3+c/3][t] =true;

c ++;

if(c>=SIZE){

c =0;

r ++;

if(r>=SIZE) break outLoop;

}

}

if(r<0) return false;

for(r=0;r

for(c=0;c

if(!p.isFixed(r,c)) p.setNumber(r,c,num[r][c]);

return true;

}

//test

public static void main(String[] args){

Puzzler p =new Puzzler();

int[][] data ={{0,0,0, 0,0,4, 0,7,6},

{8,0,1, 0,0,0, 0,3,0},

{0,4,6, 0,0,3, 0,0,0},

{0,0,0, 0,2,0, 7,0,1},

{1,0,0, 7,0,6, 0,0,5},

{5,0,7, 0,3,0, 0,0,0},

{0,0,0, 9,0,0, 8,1,0},

{0,5,0, 0,0,0, 2,0,4},

{9,1,0, 8,0,0, 0,0,0}

};

p.setPuzzler(data);

System.out.println(solve(p));

for(int r =0;r

for(int c=0;c

System.out.println();

}

}

}

總結

以上是生活随笔為你收集整理的java数独最快解_[分享]数独的JAVA解法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。