輸入12 12 12顯示答案,如果沒有顯示就是沒有結果
輸入13 13 13更換數獨開局
輸入0-8 0-8 0-9在指定位置放值
輸入11 11 11檢驗數獨是否正確
#include#include#include//rand函式
#include//srand函式
#include"consolecolor.h"
#includeusing namespace std;
#define rr 729 //81*9 建立出9個舞蹈鏈,分別代表填入的數字?
#define cc 324 //81*4 約束條件?
#define inf 1000000000
class node;
class dealwithsudoku//dealwithsudoku
void initial()
void setch(int a[9])//for
}//for
ch[81]='\0';
builddl();
}//setch
void builddl()//for
//建立行
for(i=-1;++idown=&row[i];
row[i].down->up=&row[i];
}//for
int r,c,val,tr,tc;
for(i=-1;++iright=row[i].right;
row[i].right->left=row[i].left;
} solve(1);
}//builddl
void link(int r,int c)
void remove(int c)
}} void resume(int c)
} col[c].left->right=&col[c];
col[c].right->left=&col[c];
} void solve(int k)
scnt++;
return;
} node *t,*tt;
int min=inf,tc;
for(t=head.right;t!=&head;t=t->right)
} //移除這一列
remove(tc);
for(t=col[tc].down;t!=&col[tc];t=t->down)
t->left->right=t->right;
solve(k+1);
if(scnt>=2)return;
t->right->left=t;
for(tt=t->left;tt!=t;tt=tt->left)
t->right->left=t->left;
} resume(tc);
return;
} int* returnresult()
else return null;
}};class range
void assign(int is,int ie,int js,int je)
bool i_check(int i)
bool j_check(int j)
bool check(int i,int j)
};/*
class node
locked=false;
} bool onlyone()
if(sum==1)return true;
return false;
} int result()
} }void setfalse(int i)
};*/
dealwithsudoku dws;
class sudoku
} return -1;
} bool area_check(int is,int ie,int js,int je)//if
}//for
}//for
for(i=-1;++i'9')//if
}//for
}//for
for(i=-1;++i<81;)
a[i/9][i%9]=(int)(c[i]-'0');
}//for
} bool all_check()//if
}//for
for(i=-1;++i<9;)
}for(temp=j;++temp<9;)
}}//for
}//for
return true;
} bool row_check(int r)
}} return true;
} bool col_check(int c)
}} return true;
} sudoku()//for
}//for
int sum=rand()%40,temp;
for(;sum--!=0;)//if
}//if
if(temp!=j)//if
}//if
}//for
}//do
while(area_check(r[r_n].i_start,r[r_n].i_end,r[r_n].j_start,r[r_n].j_end));
v[i][j]=true;
}//for
}//sudoku
void display()//if
else if(i==11 && j==11 && n==11)
} else if(i==12 && j==12 && n==12)}}
return false;
} else if(i==13 && j==13 && n==13)//for
}//for
int sum=rand()%40,temp;
for(;sum--!=0;)//if
}//if
if(temp!=j)//if
}//if
}//for
}//do
while(area_check(r[r_n].i_start,r[r_n].i_end,r[r_n].j_start,r[r_n].j_end));
v[i][j]=true;
}//for
}//else
else
system("cls");
for(;;)
inline std::ostream& red(std::ostream &s)
inline std::ostream& green(std::ostream &s)
inline std::ostream& yellow(std::ostream &s)
inline std::ostream& white(std::ostream &s)
struct color ;
word m_color;
};template std::basic_ostream<_elem>&
operator<& i, color& c)
// copyleft vincent godin
舞蹈鏈 精確覆蓋,解決數獨問題
首先看看數獨問題 9 9的方格 的規則 1 每個格仔只能填乙個數字 2 每行每個數字只能填一遍 3 每列每個數字只能填一遍 4 每宮每個數字只能填一遍 那現在就是利用這個規則把數獨問題轉換為精確覆蓋問題 可是,直觀上面的規則,發現比較難以轉換為精確覆蓋問題。因此,把上面的表述換個說法 1 每個格仔只...
數獨解法 C 實現
include using namespace std 構造完成標誌 bool sign false 建立數獨矩陣 int num 9 9 函式宣告 void input void output bool check int n,int key int dfs int n 主函式 int main ...
9 9數獨 C 實現
9 9數獨規則 在乙個9 9的九宮格裡面填數字,每個方格中填入合適的數字以使得每行 從左到右 每列 從上到下 以及每個九宮格 加粗線條部分 都要包含從1 9的數字。示例如下 建立9 9的數獨矩陣 注意 int型!bool flag false void input bool check int n,...