求解数独 用数独求解

\u8fd9\u4e2a\u6570\u72ec\u600e\u4e48\u89e3

\u8fd9\u4e2a\u6570\u72ec\u7b54\u6848\uff1a

2\u30014\u30017\u30015\u30016\u30018\u30019\u30013\u30011
1\u30019\u30015\u30013\u30014\u30012\u30016\u30017\u30018
8\u30016\u30013\u30011\u30019\u30017\u30012\u30014\u30015
9\u30015\u30018\u30017\u30013\u30014\u30011\u30012\u30016
3\u30011\u30012\u30016\u30018\u30015\u30014\u30019\u30017
6\u30017\u30014\u30012\u30011\u30019\u30015\u30018\u30013
4\u30013\u30019\u30018\u30015\u30011\u30017\u30016\u30012
5\u30012\u30016\u30014\u30017\u30013\u30018\u30011\u30019
7\u30018\u30011\u30019\u30012\u30016\u30013\u30015\u30014\u3002

import java.util.Scanner;
public class Sudoku {
int result = 0;// \u7ed3\u679c\u6570
public static void main(String[] args) {
int[][] a = new int[9][9];
Scanner scan = new Scanner(System.in);
System.out.printf("\u8bf7\u8f93\u5165\u6570\u72ec\u4e2d\u7684\u539f\u59cb\u6570\u636e\uff0c\u6ca1\u6709\u6570\u636e\u7684\u75280\u4ee3\u66ff\u3002\n");
for (int i = 0; i < 9; i++) {
System.out.printf("\u8bf7\u8f93\u5165\u7b2c%d\u884c\u76849\u4e2a\u6570\uff1a", i + 1);
for (int j = 0; j < 9; j++)
// a[i][j] = j+1;
a[i][j] = scan.nextInt();
}
//
// int[][] t = new int[a.length][];
// for(int i=0;i<a.length;i++){
// t[i]=new int[a[i].length];
// }
//
// for (int i = 0; i < 9; i++) {
// // System.out.printf("\u8bf7\u8f93\u5165\u7b2c%d\u884c\u76849\u4e2a\u6570\uff1a", i + 1);
// for (int j = 0; j < 9; j++)
// t[i][j]=a[i][j];
// }
Sudoku sudoku = new Sudoku();
// System.out.println("+++++++++++++++++++++++++++");
// sudoku.print(t);
// System.out.println("+++++++++++++++++++++++++++");
System.out.println("\u6570\u72ec\u7684\u89e3\u4e3a\uff1a");
sudoku.sudoku(a, 0);
if (sudoku.result == 0) {
System.out.println("\u6b64\u6570\u72ec\u65e0\u89e3!");
}
}
// \u6570\u72ec\u6c42\u89e3\u51fd\u6570
public void sudoku(int[][] a, int n) {
int[][] temp = new int[a.length][a[0].length];
int i, j;
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
temp[i][j] = a[i][j];
}
}
i = n / 9;
j = n % 9; // \u6c42\u51fa\u7b2cn\u4e2a\u6570\u7684\u884c\u6570\u548c\u5217\u6570
if (a[i][j] != 0) { // \u5df2\u7ecf\u6709\u539f\u59cb\u6570\u636e
if (n == 80) { // \u662f\u6700\u540e\u4e00\u4e2a\u683c\u5b50\uff0c\u8f93\u51fa\u53ef\u884c\u89e3
print(temp);
} else { // \u4e0d\u662f\u6700\u540e\u4e00\u4e2a\u683c\u5b50\uff0c\u6c42\u4e0b\u4e00\u4e2a\u683c\u5b50
sudoku(temp, n + 1);
}
} else { // \u6ca1\u6709\u6570\u636e
for (int k = 1; k <= 9; k++) {
boolean flag = check(temp, i, j, k);
if (flag) // \u7b2ci\u884c\u3001\u7b2cj\u5217\u53ef\u4ee5\u662fk
{
temp[i][j] = k; // \u8bbe\u4e3ak
if (n == 80) {
print(temp);
} else {
sudoku(temp, n + 1);
}
temp[i][j] = 0; // \u6062\u590d\u4e3a0\uff0c\u5224\u65ad\u4e0b\u4e00\u4e2ak
}
}
}
}
// \u8f93\u51fa\u53ef\u884c\u7684\u89e3
public void print(int[][] a) {
result++;
System.out.printf("\u7b2c%d\u4e2a\u586b\u6cd5\u4e3a\uff1a\n", result);
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.printf("%d ", a[i][j]);
if ((j == 2) || (j == 5)) {
System.out.printf(" ");
}
}
System.out.printf("\n");
if ((i == 2) || (i == 5)) {
System.out.printf("\n");
}
}
System.out.printf("\n");
}
// \u5224\u65ad\u662f\u5426\u53ef\u4ee5\u5c06\u7b2ci\u884c\u3001\u7b2cj\u5217\u7684\u6570\u8bbe\u4e3ak
public boolean check(int[][] a, int i, int j, int k) {
int m, n;
// \u5224\u65ad\u884c
for (n = 0; n < 9; n++) {
if (a[i][n] == k) {
return false;
}
}
// \u5224\u65ad\u5217
for (m = 0; m < 9; m++) {
if (a[m][j] == k) {
return false;
}
}
// \u5224\u65ad\u6240\u5728\u5c0f\u4e5d\u5bab\u683c
int t1 = (i / 3) * 3;
int t2 = (j / 3) * 3;
for (m = t1; m < t1 + 3; m++) {
for (n = t2; n < t2 + 3; n++) {
if (a[m][n] == k) {
return false;
}
}
}
// \u53ef\u884c\uff0c\u8fd4\u56detrue
return true;
}
}

这个题没难度,基本全是规则性的求解,即唯一数原则即可。
答案如下
.---------.---------.---------.
| 7 3 1 | 5 2 9 | 6 4 8 |
| 5 8 6 | 4 7 1 | 9 3 2 |
| 2 9 4 | 3 6 8 | 5 7 1 |
:---------+---------+---------:
| 1 2 3 | 9 4 6 | 7 8 5 |
| 6 4 8 | 7 5 2 | 1 9 3 |
| 9 7 5 | 1 8 3 | 4 2 6 |
:---------+---------+---------:
| 4 1 7 | 8 3 5 | 2 6 9 |
| 3 6 9 | 2 1 7 | 8 5 4 |
| 8 5 2 | 6 9 4 | 3 1 7 |
'---------'---------'---------'

  • 鏁扮嫭闂鎬庝箞瑙?
    绛旓細鏁扮嫭闂鍙互閫氳繃璁$畻鏈虹▼搴姹傝В銆備竴绉嶅父瑙佺殑姹傝В鏂规硶鏄娇鐢ㄥ洖婧畻娉曘傚叿浣撴楠ゅ涓嬶細1. 棣栧厛锛屾垜浠渶瑕佸皢鏁扮嫭闂琛ㄧず鎴愪竴涓9脳9鐨勪簩缁存暟缁勶紝鍏朵腑绌虹櫧鍗曞厓鏍肩敤0琛ㄧず銆2. 浠庡乏鍒板彸銆佷粠涓婂埌涓嬮亶鍘嗘暟鐙殑鎵鏈夊崟鍏冩牸锛屾壘鍒扮涓涓┖鐧藉崟鍏冩牸銆3. 瀵逛簬杩欎釜绌虹櫧鍗曞厓鏍硷紝灏濊瘯濉叆1-9涓殑涓涓暟瀛楋紝鍒ゆ柇鏄惁...
  • 鏁扮嫭鎬庝箞姹傝В?
    绛旓細1銆佽仈闄ゆ硶銆傚湪骞舵帓鐨勪笁涓節瀹牸涓殑涓ゆ帓瀵绘壘鐩稿悓鏁板瓧锛屽啀鍒╃敤涔濆鏍煎緱鍑哄彟涓鎺掍腑璇ユ暟瀛椾綅缃,璇ユ柟娉曢傜敤浜庝腑楂樼骇鏁扮嫭.2銆佸贰鏍兼硶 鎵惧嚭鍦ㄦ瘡涓節瀹牸涓嚭鐜伴鐜囪緝楂樼殑鏁板瓧锛屽緱鍑鸿鏁板瓧鍦ㄥ叾浣欎節瀹牸鍐呬綅缃,璇ユ柟娉曞簲鐢ㄤ簬鏂规硶涓涔嬪悗銆3銆佹帓闄ゆ硶 杩欎釜鏂规硶鏄В鍐抽棶棰樼殑鍏抽敭锛屾槗琚父浜烘墍蹇界暐銆傚湪鍚勮鍒楁垨涔濆鏍...
  • 鏁扮嫭搴旇濡備綍瑙?
    绛旓細鎵弿娉曪細棣栧厛鐢ㄧ溂鐫涙壂鎻忔暣涓鏁扮嫭鐩橀潰锛屾壘鍑洪偅浜涙樉鑰屾槗瑙佺殑鏁板瓧銆備緥濡傦紝濡傛灉涓涓崟鍏冩牸鎵鍦ㄧ殑琛屻佸垪鍜3x3灏忔牸閮藉凡缁忓寘鍚簡1鍒8鐨勬暟瀛楋紝閭d箞杩欎釜鍗曞厓鏍煎繀椤诲~9銆傚悓鏍凤紝濡傛灉涓涓暟瀛楀湪鏌愯鎴栨煇鍒椾腑宸茬粡鍑虹幇锛岄偅涔堝悓琛屾垨鍚屽垪鐨勫叾浠栧崟鍏冩牸灏变笉鑳藉啀濉繖涓暟瀛椼傚~鍏呭敮涓鍊欓夋暟锛氬鏋滀竴涓崟鍏冩牸涓彧鍓╀笅涓涓...
  • 鏁扮嫭闂姹傝В?
    绛旓細閫氬父鎯呭喌涓嬶紝鎵惧埌绌烘牸鏈灏戠殑灏忎節瀹牸锛屾瘮杈冭繖浜涚┖鏍兼墍鍦ㄨ鍒楋紝閫夊彇琛屽垪鍓╀綑绌烘牸杈冨皯鐨勯偅涓傚皢灏忎節瀹牸鍜岃鍒椾腑宸茬粡鍑虹幇鐨勬暟瀛楁帓闄わ紝鍓╀綑鐨勫氨鏄彲閫夌殑銆備緥濡傦紝绗4琛屻佺2鍒楋細灏忎節瀹牸鍐咃紝2鍜3灏氭湭浣跨敤銆備粠琛屽拰鍒楄瀵燂紝涔熸槸2鍜3灏氭湭浣跨敤銆傚彲浠ヨ瘯濉2鎴3锛屽鑳借蛋閫氾紝鍒欑户缁鎵句笅涓涓┖鏍硷紝濡備笉鑳借蛋...
  • 鏁扮嫭姹傝В
    绛旓細鏁扮嫭鐨勯氳В鏂规硶鍙婃楠わ細 鏍规嵁浠ヤ笅鏂规硶鍙互纭繚鏈缁堝緱鍒版暟鐙殑瑙o紝鑰屼笖閫氳繃鎵嬪伐杩愮畻鐨勬椂闂村熀鏈彲浠ユ帶鍒跺湪1.5涓皬鏃讹紝涓嶈闅炬槗绋嬪害锛屾墍浠ユ鏂规硶鍙互浣滀负鍙栧緱鏁扮嫭绛旀鐨勪竴鑸В娉曘 1銆佹牴鎹í鍒椼佺珫鍒楀拰鏂规牸鐨勯檺鍒舵潯浠舵帓闄ゅ悇涓偣涓嶅彲鑳界殑鏁板瓧锛屽苟浠1~9灏嗗悇涓彲鑳界殑鏁板瓧鐢ㄥ皬瀛椾綋閫愪釜鍐欒繘姣忎釜绌虹櫧鐨勬牸瀛愩傦紙璇ユ...
  • 鏁扮嫭鐨勮В娉
    绛旓細鏁扮嫭瑙f硶鍏ㄦ槸鐢辫鍒欒鐢熷嚭鏉ョ殑锛屽熀鏈В娉曞垎涓轰袱绫绘濊矾锛屼竴绫讳负鎺掗櫎娉曪紝涓绫讳负鍞竴娉曘傛洿澶嶆潅鐨勮В娉曪紝鏈缁堜篃浼氬綊缁撳埌杩欎袱澶х被涓備笅杈逛互鍥剧ず绠鍗曚粙缁嶅嚑绉嶈В娉曪紝鍙浣犺姳鍑犲垎閽熺湅涓閬嶏紝椹笂灏卞彲浠ュ紑濮嬪仛鏁扮嫭浜嗐傛暟鐙洿瑙傛硶瑙i鎶宸т富瑕佹湁锛氬敮涓瑙f硶銆佸熀纭鎽掗櫎娉曘佸尯鍧楁憭闄ゆ硶銆佸敮浣欒В娉曘佺煩褰㈡憭闄ゆ硶銆佸崟鍏...
  • 鏁扮嫭涓毦搴︽渶楂樼殑鏁扮嫭鏄摢涓?
    绛旓細鍦ㄧ嚎鏁扮嫭鍥涗釜绾у埆闅惧害鏄鏄擄紝姝e父锛屽洶闅惧拰鐩稿綋鍥伴毦鍥涗釜绛夌骇銆傛暟鐙父鎴忓彂灞曡嚦浠婏紝鍦ㄦ暟鐙埍濂借呯殑绉瀬鎺㈢储涓嬶紝姹傝В鏁扮嫭鐨勭畻娉曚紬澶氾紝鏈夌煩褰㈤《鐐瑰垹鍑忔硶銆佸叧閿暟鍒犲噺娉曠瓑銆傛暟鐙浣嶆牴鎹細鍛樼殑姘村钩浠庝綆鑷抽珮鍒嗕负涓鑷充節娈碉紝鍚勬浣嶅搴旂骇鍒垝鍒嗗涓嬶細涔濇锛氫笘鐣屾暟鐙敠鏍囪禌鍓嶄笁鍚嶏紝鍚屾椂鎻愪氦涓绡囪鏂囷紝缁忕悊浜嬩細瀹℃牳閫氳繃...
  • 鏁扮嫭姹傝В?
    绛旓細鏁扮嫭鎶宸 鍩虹鎽掗櫎娉曞氨鏄埄鐢1锝9鐨勬暟瀛楀湪姣忎竴琛屻佹瘡涓鍒椼佹瘡涓涓節瀹牸閮藉彧鑳藉嚭鐜颁竴娆$殑瑙勫垯杩涜瑙i鐨勬柟娉曘傚熀纭鎽掗櫎娉曞彲浠ュ垎涓鸿鎽掗櫎銆佸垪鎽掗櫎銆佷節瀹牸鎽掗櫎銆 瀹為檯瀵绘壘瑙g殑杩囩▼涓: 瀵绘壘涔濆鏍兼憭闄よВ:鎵惧埌浜嗘煇鏁板湪鏌愪竴涓節瀹牸鍙~鍏ョ殑浣嶇疆鍙綑涓涓殑鎯呭舰;鎰忓嵆鎵惧埌浜嗚鏁板湪璇ヤ節瀹牸涓殑濉叆浣嶇疆銆 瀵绘壘鍒楁憭闄...
  • 鏁扮嫭娓告垙鐨勫叿浣撶帺娉
    绛旓細鏁扮嫭娓告垙锛屾槸涓涓節瀹牸锛屾瘡涓瀹張鍒嗕负涔濅釜灏忔牸銆傚湪杩欏叓鍗佷竴鏍间腑缁欏嚭涓瀹氱殑宸茬煡鏁板瓧锛屽埄鐢ㄩ昏緫鍜屾帹鐞嗭紝鍦ㄥ叾浠栫殑绌烘牸涓婂~鍏1-9鐨勬暟瀛椼備娇1-9姣忎釜鏁板瓧鍦ㄦ瘡涓琛屻佹瘡涓鍒楀拰姣忎竴瀹腑閮藉彧鍑虹幇涓娆°傝瑙佷笅鍥句緥瀛愶紝浜嬪厛缁欑殑鏁板瓧鏉′欢瓒婂锛岃В棰樼殑閫熷害瓒婂揩銆
  • 姹傝В鏁扮嫭,楹荤儲澶у甯垜瑙d竴涓嬭阿璋
    绛旓細鍩烘湰鍏崇郴锛1鍒9鐨勫拰=涓綅鏁5脳9=45锛屾瘡琛屽垪锛屽潡(9瀹)鐨勫拰閮芥槸45锛岀敱姝ゆ帹鏂煇浜涘崟鍏冩牸鐨勫硷紝鍐嶇敤鎺掗櫎娉曘佽瘯閿欐硶姹傝В銆傚悇琛屼粠涓婂埌涓嬬紪鍙稟BCDEFGHI锛屽悇鍒椾粠宸﹀埌鍙崇紪鍙123456789.渚夸簬鎻忚堪銆傛瘡涓崟鍏冩牸鐢ㄨ瀛楁瘝涓庡垪鏁板瓧缂栧彿锛屽绗竴琛岀涓鍒桝1锛岀瓑绛夈備節瀹牸鐢ㄤ笂涓笅宸︿腑鍙崇紪鍙枫備笂宸︼紝涓婁腑锛屼笂...
  • 扩展阅读:数独扫一扫解题器 ... 解数独的软件 ... 手机扫一扫解题 ... 九宫格答案查询器 ... 免费数独在线玩 ... 数独求解器在线 ... 免费数独题库 ... 欧泊颗在线数独 ... 数独答案生成器 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网