首页 > 解决方案 > 如何在 ncurses 中填充数独(9x9)网格?

问题描述

我有一个使用 ncurses 的 (mvw)hline/vline 函数绘制的 9x9 数独网格,现在我正在尝试使用 9x9 数组中的数字填充它。我的问题是最有效/最有效的方法是什么?

如果有帮助,我正在使用 ncurses v6.1-r2 和 C++17(使用 g++ 编译)。我已经完成了遍历数组(将从中填充板),但在那之后我想不出一种方法来填充每个正方形。

这是我用来绘制网格的代码。

WINDOW *create_board(int x, int y, int width, int height) {
    WINDOW *local_win;

    local_win = newwin(height, width, y, x);

    mvwaddch(local_win, 0,          0,         '+');
    mvwaddch(local_win, 0,          width - 1, '+');
    mvwaddch(local_win, height - 1, 0,         '+');
    mvwaddch(local_win, height - 1, width - 1, '+');

    mvwhline(local_win, 0,          1, '-', width - 2);
    mvwhline(local_win, height - 1, 1, '-', width - 2);

    mvwvline(local_win, 1,      0,         '|', height - 2);
    mvwvline(local_win, 1,      width - 1,     '|', height - 2);

    for (int i = 0; i < 9; i++) {
        mvwvline(local_win, 1,          (10 * i), '|', height - 2);
        mvwhline(local_win, (4.2 * i),  1,        '-', width - 2);
    }

    wrefresh(local_win);
    return local_win; 
}

如果措辞尴尬,我深表歉意,英语不是我的第一语言。

编辑:为清楚起见,我不想生成数独板,我只想用数组中的预定义数字填充现有网格。例如:

int board[9][9] =  
   {{0,0,0,7,0,0,0,0,0},
    {1,0,0,0,0,0,0,0,0},
    {0,0,0,4,3,0,2,0,0},
    {0,0,0,0,0,0,0,6,0},
    {0,0,5,0,9,0,0,0,0},
    {0,0,0,0,0,4,1,8,0},
    {0,0,0,8,1,0,0,0,0},
    {0,2,0,0,0,0,5,0,0},
    {4,0,0,0,0,3,0,0,0}};

标签: c++ncursessudoku

解决方案


推荐阅读