c ++数独检查行,列,子方块

时间:2015-11-28 03:53:26

标签: c++ arrays sudoku

       #include<iostream>
      #include<fstream>
      #include<iomanip>
      #include<string>
        using namespace std;
      const int MAX = 9;

      typedef char BOARD[MAX][MAX];

      void dis_board(BOARD);
      void new_board(BOARD, ifstream& in); 
      void add();
      void remove(BOARD);
      bool chk_row(BOARD arr, int row, int col);
      bool chk_col(BOARD arr, int row, int col);
      bool chk_sqr(BOARD arr, int row, int col);

      int main()
      {

    BOARD board;
int row=0, col=0, num_ele = 0, num;
char ch1;
ifstream infile;
infile.open("mp6in.txt");

infile.get(ch1);
while (infile)
{
    if (ch1 == 'N')
        new_board(board, infile);

    if (chk_row == false)
        cout << "There is an error" << endl;

    if (chk_col == false)
        cout << "There is an error" << endl;
    chk_sqr(board, 0, 0);
    if (chk_sqr == false)
        cout << "There is an error" << endl;


    if (ch1 == 'D')
        dis_board(board);

    infile.get(ch1);

}

   }
   void dis_board(BOARD arr)
    {
for (int i = 0; i < MAX; i++)
{
    for (int j = 0; j < MAX; j++)
        cout << setw(3) << arr[i][j];
        cout << endl;
}
cout << endl;
    }
   void new_board(BOARD arr, ifstream& in)
   {    
in.ignore(100, '\n');
for (int i = 0; i < MAX; i++)
{
    for (int j = 0; j < MAX; j++)
        in.get(arr[i][j]);
        in.ignore(100, '\n');

}
  }
   bool chk_row(BOARD arr, int row, int col)
  {
for (int i = 0; i < MAX; i++)
{
    if (i != col)
    {
        if (arr[row][i] == arr[row][col])
        {
            return false;
        }
    }
}
return true;
  }
  bool chk_col(BOARD arr, int row, int col)
{
for (int i = 0; i < MAX; i++)
{
    if (i != row)
    {
        if (arr[i][col] == arr[row][col])
        {
            return false;
        }
    }
}
return true;
      }   
     bool chk_sqr(BOARD arr, int row, int col)
   {
int asquare = row / 3;
int bsquare = col / 3;

for (int i = asquare * 3; i < (asquare * 3 + 3); i++)
{
    for (int j = bsquare * 3; j < (bsquare * 3 + 3); j++)
    {
        if (!(i == row && j == col))
        {
            if (arr[row][col] == arr[i][j])
            {
                return false;
            }
        }
    }
}
return true;
   }

以防万一我和别人说话。我尝试实现以下检查功能,当然它们无法正常工作。例如,我知道我的第一块板在右下方块中有重复的数字,但我的功能无法找到它。

1 个答案:

答案 0 :(得分:0)

chk_row是一个函数 - 你需要调用它。目前您只需查看:

if (chk_row == false)

这只是检查函数指针是否为false,这是永远不会发生的。你需要像这样调用函数:

if (chk_row(board, row, col) == false)

您需要了解rowcol应该是什么。可能你需要一个循环来检查所有的行和列,但我认为这是作业,所以你应该自己尝试。