- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数独游戏C回溯法
数独游戏 C++ 回溯法
数独游戏的规则:
1 每个数字在每一行只能出现一次
2 每个数字在每一列只能出现一次
3 每个数字在每一区只能出现一次
下面的input.txt是一个例子的约束条件 第一列表示每一个数所在的行 第二列表示每一个数所在的列,第三个这个位置上的值。
Input.txt
1 1 7
1 4 1
1 8 8
1 9 3
2 1 4
2 3 2
2 5 7
2 6 3
3 4 4
3 5 5
3 8 2
3 9 7
4 3 7
4 7 3
4 8 1
4 9 2
5 2 4
5 3 3
5 4 8
6 3 5
6 5 9
7 2 2
7 3 1
7 5 8
8 2 3
8 4 2
8 6 1
8 7 8
9 7 2
9 8 6
9 9 1
一 回溯法
//============================================
#include
#include
using namespace std;
int State[9][9];
///------------------------------
void InitState()
{
for (int i=0; i9; i++)
{
for (int j=0; j9;j++)
{
State[i][j] = 0;
}
}
}
//-------------------------------
void Load()
{
freopen(input.txt,r,stdin); //输入从input.txt
int x, y, value;
int temp = 0;
while (scanf (%d %d %d, x, y, value) != EOF)
{
State[x-1][y-1] = value;
}
}
//---------------------------------
//检查每一个小区内只能出现一次
bool ChechZone(int x, int y, int i)
{
int xZone = 3 * (x / 3); //找到每个小区的位置
int yZone = 3 * (y / 3);
int j = 0;
int k = 0;
bool flag = true;
for (j=xZone; j p
{
for (k=yZone; k
{
//if (x == j y == k)
//{
// continue;
//}
if ((x != j || y != k) State[j][k] == i)
{
flag = false;
goto A1;
}
}
}
A1:
return flag;
}
//--------------------------------
//检查是否符合条件
bool ChechAssign(int x, int y, int i)
{
bool flag = true;
for (int k=0; k9; k++)
{
if (k != y i == State[x][k] )
{
flag = false;
}
if (k != x i == State[k][y] )
{
flag = false;
}
if (!ChechZone(x, y, i))
{
flag = false;
}
}
return flag;
}
///------------------------------
int Search (int depth)
{
if (depth = 81)
{
//return Chech();
return 1;
}
int x, y;
x = depth / 9 ;
y = depth % 9 ;
//检查x y有没有被 赋值
if (0 != State[x][y])
{
return Search (depth + 1);
}
else //尝试赋值
{
for (int i=1; i=9; i++)
{
//检查是否违反约束条件
State[x][y] = i;
if (ChechAss
您可能关注的文档
- 放射源基础知识.doc
- 放疗中对金属植入物及心脏起搏器的处理 杜小波.ppt
- 政企客户一站业务经理岗位技能篇.doc
- 政企客户经理服务规范.doc
- 改良式旗袍.ppt
- 政府在公立医院回归公益性改革中的主导作用探析.doc
- 政府绩效审计案例.ppt
- 政府门户网站栏目规划参考.doc
- 政府非税收入稽查工作讲义.doc
- 政治新人教必修1 消费及其类型说课课件.ppt
- 2024至2030年中国硝酸钠行业深度调研及发展预测报告.docx
- 2024至2030年中国苯那普利片行业深度调查与前景预测分析报告.docx
- 2024至2030年中国微型胶卷行业发展预测及投资策略报告.docx
- 笔式点火线圈项目申请报告.docx
- 白糖项目申请报告.docx
- 酒桶项目申请报告.docx
- 2024至2030年中国优质非合金钢中板行业深度调查与前景预测分析报告.docx
- 2024至2030年中国二级钢筋行业深度调查与前景预测分析报告.docx
- 2024至2030年中国连续运载乘客输送机行业发展预测及投资策略报告.docx
- 2024至2030年中国油树脂行业发展预测及投资策略报告.docx
文档评论(0)