21xrx.com
2024-12-22 16:48:32 Sunday
登录
文章检索 我的文章 写文章
简单易懂的C++数独游戏代码
2023-07-06 09:43:36 深夜i     --     --
C++ 数独游戏 代码 简单易懂

C++数独游戏代码

数独是一种智力游戏,通过填数字的方式让每行、每列和宫区中的数字都不重复。下面介绍一个简单易懂的C++数独游戏代码。

在C++中实现数独游戏,需要用到递归和回溯的概念。我们首先定义一个9*9的二维数组来表示数独盘面:

int board[9][9];

接下来,编写递归函数solveBoard(int row, int col),用于解决数独游戏。在solveBoard函数中,首先判断当前行和列是否都已经处理完成,若处理完成,则返回true。如果当前格子上已经填了数字,则跳到下一个格子。我们可以通过循环遍历数字1-9,尝试从中挑选可以填入当前格子的数字。若找到可以填入的数字,就递归地调用solveBoard函数,直到处理完成整个数独盘面。

bool solveBoard(int row, int col)

{

  //处理完成当前行和列,返回true

  if (col == 9)

  {

    col = 0;

    row++;

    if (row == 9)

      return true;

  }

  //已经有数字的格子,跳到下一个格子

  if (board[row][col] != 0)

  {

    return solveBoard(row, col + 1);

  }

  //尝试填入数字

  for (int num = 1; num <= 9; num++)

  {

    if (isValid(row, col, num))

    {

      board[row][col] = num;

      if (solveBoard(row, col + 1))

        return true;

      board[row][col] = 0; //回溯

    }

  }

  return false;

}

在solveBoard函数中,我们调用了函数isValid(int row, int col, int num),用于判断当前数字是否可以填入指定行和列中的格子。isValid函数中,我们需要先检查当前行和列是否有重复的数字,然后检查当前宫区是否有重复的数字。宫区可以用如下方式来表示:(row / 3) * 3 + (col / 3)。

bool isValid(int row, int col, int num)

{

  //检查当前行和列

  for (int i = 0; i < 9; i++)

  {

    if (board[row][i] == num || board[i][col] == num)

      return false;

  }

  //检查当前宫区

  int boxRow = (row / 3) * 3;

  int boxCol = (col / 3) * 3;

  for (int i = boxRow; i < boxRow + 3; i++)

  {

    for (int j = boxCol; j < boxCol + 3; j++)

    {

      if (board[i][j] == num)

        return false;

    }

  }

  return true;

}

最后,在主函数中我们调用solveBoard函数,输出最终的数独盘面即可。

int main()

{

  //初始化数独盘面

  //......

  //解决数独问题

  if (solveBoard(0, 0))

    //输出数独盘面

    //......

  else

    cout << "无解" << endl;

  return 0;

}

总体来说,以上代码实现了一个简单易懂的C++数独游戏。如果你愿意,你可以在此基础上加入GUI界面,让游戏玩起来更加方便和美观。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复