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++)
    {