c#编写函数填写适当数字使九宫格加起来为15
时间: 2023-04-24 07:04:38 浏览: 63
以下是一个C#函数,可以填写适当的数字使得九宫格加起来为15:
```
public static void FillSudoku(int[,] sudoku)
{
int n = sudoku.GetLength(0);
int[] nums = new int[n];
for (int i = 0; i < n; i++)
{
nums[i] = i + 1;
}
FillSudokuHelper(sudoku, nums, 0, 0);
}
private static bool FillSudokuHelper(int[,] sudoku, int[] nums, int row, int col)
{
int n = sudoku.GetLength(0);
if (row == n)
{
return true;
}
if (col == n)
{
return FillSudokuHelper(sudoku, nums, row + 1, 0);
}
for (int i = 0; i < nums.Length; i++)
{
int num = nums[i];
if (IsValid(sudoku, row, col, num))
{
sudoku[row, col] = num;
if (FillSudokuHelper(sudoku, nums, row, col + 1))
{
return true;
}
sudoku[row, col] = 0;
}
}
return false;
}
private static bool IsValid(int[,] sudoku, int row, int col, int num)
{
int n = sudoku.GetLength(0);
for (int i = 0; i < n; i++)
{
if (sudoku[row, i] == num || sudoku[i, col] == num)
{
return false;
}
}
int sqrtN = (int)Math.Sqrt(n);
int boxRow = row / sqrtN * sqrtN;
int boxCol = col / sqrtN * sqrtN;
for (int i = boxRow; i < boxRow + sqrtN; i++)
{
for (int j = boxCol; j < boxCol + sqrtN; j++)
{
if (sudoku[i, j] == num)
{
return false;
}
}
}
return true;
}
```
这个函数使用回溯算法来填写九宫格。它首先生成一个包含1到9的数组,然后调用FillSudokuHelper函数来填写九宫格。FillSudokuHelper函数递归地尝试在每个单元格中填写数字,如果填写成功,则继续递归下一个单元格,否则回溯到上一个单元格。IsValid函数用于检查填写的数字是否有效,即是否在同一行、列或3x3子方格中已经出现过。如果成功填写了整个九宫格,则返回true,否则返回false。