设为首页 加入收藏

TOP

数独游戏C++回溯法
2014-11-05 18:30:08 】 浏览:266
Tags:游戏 回溯

  数独游戏的规则:


  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; i<9; i++)


  {


  for (int j=0; j<9;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


  {


  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; k<9; 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;


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++类型转换:转换操作符 下一篇C++命名空间

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目