首页 > 解决方案 > 在 C++ 中绘制数独网格

问题描述

所以我一直在编写一个程序,它将从外部文本文件中获取一个数独,将其填充到一个二维数组中,然后打印解决的结果。我已经完成了解决程序的所有逻辑,但是每当我将数独输出到控制台时,它看起来像这样:

8 1 2 7 5 3 6 4 9
9 4 3 6 8 2 1 7 5
6 7 5 4 9 1 2 8 3
1 5 4 2 3 7 8 9 6
3 6 9 8 4 5 7 2 1
2 8 7 1 6 9 5 3 4
5 2 1 9 7 4 3 6 8
4 3 8 5 2 6 9 1 7
7 9 6 3 1 8 4 5 2

现在,如果我的目标只是输出结果,那将非常好,但我想要一些更易于阅读和类似 Sodoku 的东西。

理想情况下,我希望它们在 Sodoku 中所有必要的块周围是 3x3 方格,并使其看起来像这样或至少类似:

 ----- ------ ------
|8 1 2| 7 5 3| 6 4 9|
|9 4 3| 6 8 2| 1 7 5|
|6 7 5| 4 9 1| 2 8 3|
 ----- ------ ------
|1 5 4| 2 3 7| 8 9 6|
|3 6 9| 8 4 5| 7 2 1|
|2 8 7| 1 6 9| 5 3 4|
 ----- ------ ------
|5 2 1| 9 7 4| 3 6 8|
|4 3 8| 5 2 6| 9 1 7|
|7 9 6| 3 1 8| 4 5 2|
 ----- ------ ------

在这里,我还将包括我的数独本身的打印功能:

void print_puzzle()
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            cout << puzzle[i][j] << " ";
        }
        cout << endl;
    }
}

如果有人可以帮助我进行具体实施以实现我的目标,那将非常有帮助

编辑

我已将代码的打印功能重写为输出数独的位置,如下所示:

 ------  ------  ------
| 8 1 2 | 7 5 3 | 6 4 9 |
| 9 4 3 | 6 8 2 | 1 7 5 |
| 6 7 5 | 4 9 1 | 2 8 3 |
 ------  ------  ------
| 1 5 4 | 2 3 7 | 8 9 6 |
| 3 6 9 | 8 4 5 | 7 2 1 |
| 2 8 7 | 1 6 9 | 5 3 4 |
 ------  ------  ------
| 5 2 1 | 9 7 4 | 3 6 8 |
| 4 3 8 | 5 2 6 | 9 1 7 |
| 7 9 6 | 3 1 8 | 4 5 2 |
 ------  ------  ------

我通过将我的函数编辑为以下内容来做到这一点:

void printPuzzle()
{
    for (int i = 0; i < 9; i++)
    {
        if (i == 0 || i == 3 || i == 6)
        {
            cout << " ------  ------  ------" << endl;
        }
        for (int j = 0; j < 9; j++)
        {
            if (j == 0 || j == 3 || j == 6)
            {
                cout << "| ";
            }
            cout << puzzle[i][j] << " ";
        }
        cout << "|";
        cout << endl;
    }
    cout << " ------  ------  ------" << endl;
}

标签: c++grid

解决方案


推荐阅读