数独游戏 C++ 回溯法.doc

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档