數獨遊戲的解法:
先將數獨分為九個格仔,用乙個陣列將每個小九宮格的候選數存放下來,將候選數挨個放進數獨裡的空位,如果這一行和這一列都沒有這個數字,繼續放入下乙個,如果不能放入的話就回到上一步繼續嘗試,直到成功求出數獨的解為止;
比如這個數獨第乙個九宮格的候選數就有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 的方法很多,前段時間閒的無聊我也寫了乙個。演算法很簡單,就是試...