C++ c+中的数独解题+;使用类
这个数独解题程序正在编译中,但出现了错误“分段错误”,请帮助我解决这个问题,并说明为什么我会出现分段错误,因为我已经把每件事都写得很好了。提前谢谢C++ c+中的数独解题+;使用类,c++,arrays,C++,Arrays,这个数独解题程序正在编译中,但出现了错误“分段错误”,请帮助我解决这个问题,并说明为什么我会出现分段错误,因为我已经把每件事都写得很好了。提前谢谢 #include<iostream> #include<math.h> class sudoku { public: sudoku(); void initializeSudokuGrid(); void printSudokuGrid(); bool solveSudoku(); b
#include<iostream>
#include<math.h>
class sudoku
{
public:
sudoku();
void initializeSudokuGrid();
void printSudokuGrid();
bool solveSudoku();
bool findEmptyGridSlot(int &row, int &col);
bool canPlaceNum(int row, int col, int num);
bool numAlreadyInRow(int row, int num);
bool numAlreadyInCol(int col, int num);
bool numAlreadyInBox(int smallGridRow, int smallGridCol, int num);
int grid[9][9];
};
sudoku::sudoku()
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
grid[i][j] = 0;
}
}
std::cout << "\n all the grid locations are initialise to zero";
}
void sudoku::initializeSudokuGrid()
{
char x = 'y';
while (x == 'y')
{
int row, col, var;
std::cout
<< "\n enter the row,column and integer in the box(that is 1-9 numbers \n";
std::cin >> row;
std::cin >> col;
std::cin >> var;
grid[row][col] = var;
std::cout
<< "\n are there any slots that u want to enter the numbers into the boxs enter y else enter n \n";
std::cin >> x;
}
}
void sudoku::printSudokuGrid()
{
std::cout << "\n";
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
std::cout << grid[i][j] << " ";
}
std::cout << "\n";
}
}
bool sudoku::solveSudoku()
{
int row, col;
if (findEmptyGridSlot(row, col))
{
for (int num = 1; num <= 9; num++)
{
if (canPlaceNum(row, col, num))
{
grid[row][col] = num;
if (solveSudoku()) //recursive call
return true;
grid[row][col] = 0;
}
}
return false; //backtrack
}
else
return true; //there are no empty slots
}
bool sudoku::numAlreadyInRow(int row, int num)
{
for (int i = 0; i < 9; i++)
{
if (num != 0 && grid[row][i] == num)
return true;
}
return false;
}
bool sudoku::numAlreadyInCol(int col, int num)
{
for (int i = 0; i < 9; i++)
{
if (num != 0 && grid[i][col] == num)
return true;
}
return false;
}
bool sudoku::canPlaceNum(int row, int col, int num)
{
if (!numAlreadyInRow(row, num))
{
if (!numAlreadyInCol(col, num))
{
int smallGridRow = row - row % 3;
int smallGridCol = col - col % 3;
if (!numAlreadyInBox(smallGridRow, smallGridCol, num))
{
return true;
}
}
}
return false;
}
bool sudoku::numAlreadyInBox(int smallGridRow, int smallGridCol, int num)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (grid[i + smallGridRow][j + smallGridCol] == num)
return true;
}
}
return false;
}
bool sudoku::findEmptyGridSlot(int &row, int &col)
{
for (int row = 0; row < 9; row++)
{
for (int col = 0; col < 9; col++)
{
if (grid[row][col] == 0)
return true;
}
}
return false;
}
int main()
{
sudoku s;
s.printSudokuGrid();
s.initializeSudokuGrid();
s.printSudokuGrid();
std::cout << "\n after solving the problem \n";
if (s.solveSudoku())
s.printSudokuGrid();
else
std::cout << "\n solution doesnt exist for this type of solution \n";
return 0;
}
#包括
#包括
类数独
{
公众:
数独();
void initializeSudokuGrid();
void printSudokuGrid();
布尔数独();
布尔findEmptyGridSlot(内部和行、内部和列);
bool canPlaceNum(int行、int列、int num);
bool numAlreadyInRow(int row,int num);
bool numAlreadyInCol(int col,int num);
bool numAlreadyInBox(int smallGridRow、int smallGridCol、int num);
整数网格[9][9];
};
数独
{
对于(int i=0;i<9;i++)
{
对于(int j=0;j<9;j++)
{
网格[i][j]=0;
}
}
std::cout行;
标准:cin>>col;
std::cin>>var;
网格[行][col]=var;
标准::cout
>x;
}
}
void数独::printSudokuGrid()
{
std::cout您的findEmptyGridSlot
函数中有错误
bool sudoku::findEmptyGridSlot(int &row, int &col)
{
for(int row=0;row<9;row++)
{
for(int col=0;col<9;col++)
{
...
显然,您没有正确编写所有内容。您是否尝试调试?还修复了缩进。代码不可读。这不是您应该在此处提问的方式。请阅读以获取帮助。您是否有输出?您是否进行了一些调试?请显示您已为解决问题所做的努力,然后有人可以帮助您解决问题不,现在开始工作了。
for(row=0;row<9;row++)
{
for(col=0;col<9;col++)
{