C語言數獨遊戲的求解方法

2022-10-03 23:57:22 字數 2744 閱讀 6552

數獨遊戲的解法:

先將數獨分為九個格仔,用乙個陣列將每個小九宮格的候選數存放下來,將候選數挨個放進數獨裡的空位,如果這一行和這一列都沒有這個數字,繼續放入下乙個,如果不能放入的話就回到上一步繼續嘗試,直到成功求出數獨的解為止;

比如這個數獨第乙個九宮格的候選數就有1,2,7,8,9,我們需要從1開始放入第乙個格仔挨個嘗試直到8的時候發現剩下的兩個格仔都不能放入

這個時候我們就要撤回上乙個插入的7,發現8仍然不能放入,就繼續撤回2,發現8可以放入,就將8放入3號位置,然後將9插入

這個時候我們發現2不能放入剩下的兩格,我們就繼續撤回到1插入的時候,將2放入1號位置,然後挨個放入剩下的數

迴圈這一過程,直到數獨求出解為止;

這個方法比較容易想到,操作也比較容易實現

下面是**

**大多數都寫了備註便於理解

題目需要的1000道題放在下面了,將這1000個txt檔案拷到exe檔案同一目錄就可以了

題目鏈結:數獨題目

#include

#include

#include

#define max 81

typedef struct asda;

a zhan[max];//存放每個放進題目陣列測試的資料

void kongque(int queshi[9][9],int aa[9][9]);//函式將候選數陣列裡去除題目中有的數字

void shuchu(int aa[9][9],int q);//輸出整個陣列到檔案中

int end(int aa[9][9]); //判斷是否結束

int next(int queshi[9][9],int m,int n,int *x,int *y,int aa[9][9]);//查詢下乙個應該放進九宮格測試的資料

int chazhao(int aa[9][9],int m,int n,int num);//查詢同一行同一列是否有相同的值

int nfrz(int queshi[9][9],int aa[9][9],int m,int n,int *p);//判斷是否滿足入棧條件(就是當前值是否可以插入九宮格)

int rz(int *t,int x,int y,int p,int num);//入棧操作

int cz(int *t,int *x,int *y,int *p,int *num);//出棧操作

void aaaa(char aa[10],int a);//計算題目檔案的檔名

void bbbb(char aa[10],int a);//計算答案檔案的檔名

int main()

} fclose(u);

memset(zhan,0,sizeof(zhan));//將棧的資料全部置為0

kongque(queshi,aa);

while(end!=1)

else

} else

else

end=1;

} }else 程式設計客棧if(s==-1)

else

} }return 0;

}//函式將候選數陣列裡去除題目中有的數字

void kongque(int queshi[9][9],int aa[9][9])

if(num!=45)

return -1;

} return 0;

}//查詢下乙個應該放進九宮格測試的資料

int next(int queshi[9][9],int m,int n,int *x,int *y,int aa[9][9])

if(m>8)

while(queshi[m][n]==0)

} }*x=m;//重新獲取測試的值的x座標和y座標

*y=n;

return 0;

}//查詢同一行同一列是否有相同的值

int chazhao(int aa[9][9],int m,int n,int num)

for(i=0;i<9;i++)

return 0;

}//判斷是否滿足入棧條件(就是當前值是否可以插入九宮格)

int nfrz(int queshi[9][9],int aa[9][9],int m,int n,int *p)

if(chazhao(aa,t1,t2,num)!=0)

else

} return -1;

}//入棧操作

int rz(int *t,int x,int y,int p,int num)

else

}//出棧操作

int cz(int *t,int *x,int *y,int *p,int *num)

else

}//計算題目檔案的檔名

void aaaa(char aa[10],int a)

else if(a<100)

else if(a<1000)

aa[4]='.';

aa[5]='t';

aa[6]='x';

aa[7]='t';

aa[8]='\0';

}//計算答案檔案的檔名

void bbbb(char aa[10],int a)

else if(a<100)

else if(a<1000)

aa[4]='.';

aa[5]='t';

aa[6]='x';

aa[7]='t';

aa[8]='\0';

}本文標題: c語言數獨遊戲的求解方法

本文位址:

C語言數獨遊戲求解

數獨遊戲的解法 先將數獨分為九個格仔,用乙個陣列將每個小九宮格的候選數存放下來,將候選數挨個放進數獨裡的空位,如果這一行和這一列都沒有這個數字,繼續放入下乙個,如果不能放入的話就回到上一步繼續嘗試,直到成功求出數獨的解為止 比如這個數獨第乙個九宮格的候選數就有1,2,7,8,9,我們需要從1開始放入...

經典數獨遊戲 數獨求解器 純C語言實現

心常樂數獨小遊戲 下面簡稱 本軟體 是一款windows平台下的數獨遊戲軟體。本軟體是開源 免費軟體。本軟體 使用純c語言編寫,mingw編譯,nsis打包。本軟體主要特性例如以下 支援 闖關模式 和 選關模式 支援 隨機生成遊戲 支援數獨遊戲提示 支援使用者對單元格做標記 提供超級工具 數獨求解器...

數獨 sudoku 遊戲的程式求解

9x9的正方形方格可以分成9個3 3的九宮格。數獨遊戲是在這樣的正方形中,首先事先給某些方格填入1 9的數字,然後要求在餘下的方格中也填入1 9的數字,要求每一行,每一列,以及每個九宮格中,都正好包含1 9這九個數字。解算 sudoku 的方法很多,前段時間閒的無聊我也寫了乙個。演算法很簡單,就是試...