當前位置:股票大全官網 - 股票投資 - 數獨算法c語言代碼

數獨算法c語言代碼

首先,步驟:

1.對於每個空格,根據規則推斷出它可能填入的數字,並存儲其所有可能的值;

2.根據可能值的個數,確定填充順序。比如有的空格只有壹種可能,壹定是正確的結果。先把它們填上。

3.填完所有只有壹種可能的空格後,回到步驟1,重新確定剩余空格的可能值;

4.當可能空間不止壹個(即每個空間有兩個以上的可能性)時,按照可能值個數從小到大的順序,采用深度(廣度)優先搜索來完成剩余空間。

二、套路:

#包含?& ltwindows.h & gt

#包含?& ltstdio.h & gt

#包含?& lttime.h & gt

夏爾?SD[81];

布爾?伊索克?=?假的;

//顯示數獨

作廢?顯示()

{

如果?(isok)?Puts(“解決方案已完成”);

不然呢?Puts("初始化完成");

為了什麽?(int?我?=?0;?我?& lt?81;?i++)

{

putchar(sd[i]?+?'0');

如果?((我?+?1)?%?9?==?0)?putchar(' \ n ');

}

putchar(' \ n ');

}

//讀取數獨

布爾?初始化()

{

文件?*fp?=?fopen("in.txt ",“Rb”);

如果?(fp?==?NULL)?回歸?假的;

fread(sd,81,?1,?FP);

fclose(FP);

為了什麽?(int?我?=?0;?我?& lt?81;?i++)

{

如果?(sd[i]?& gt=?'1'?& amp& amp?sd[i]?& lt=?'9')?sd[i]?-=?'0';

不然呢?sd[i]?=?0;

}

show();

回歸?真實;

}

//遞歸求解數獨

作廢?force(int?k)

{

如果?(isok)?返回;

如果?(!標清[k])

{

為了什麽?(int?m?=?1;?m?& lt=?9;?m++)

{

布爾?嗯?=?真實;

為了什麽?(int?n?=?0;?n?& lt?9;?n++)

{

如果?((m?==?sd[k/27*27+(k%9/3)*3+n+n/3*6])?||?(m?==?sd[9*n+k%9])?||?(m?==?sd[k/9*9+n])

{

嗯?=?假的;

打破;

}

}

如果?(毫米)

{

sd[k]?=?m;

如果?(k?==?80)

{

伊索克?=?真實;

show();

返回;

}

力(k?+?1);

}

}

sd[k]?=?0;

}

其他

{

如果?(k?==?80)

{

伊索克?=?真實;

show();

返回;

}

力(k?+?1);

}

}

int?主()

{

系統(“CLS”);

如果?(Init())

{

雙倍?開始?=?clock();

力(0);

Printf("耗時%.0fms ",時鐘()?-?開始);

}

不然呢?Puts("初始化錯誤");

getchar();

}