RE 0分求助
  • 板块P1784 数独
  • 楼主Br00k5xx
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/8/21 19:37
  • 上次更新2023/11/4 09:46:02
查看原帖
RE 0分求助
529247
Br00k5xx楼主2021/8/21 19:37

RT

#include <cstdio>
int a[9][9];
bool vis[3][10][10];
bool flag = false;
void dfs(int x, int y)
{
    if(flag)
        return;
    if (x == 9)
    {
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                printf("%d ", a[i][j]);
            }
            putchar('\n');
        }
        flag = true;
        return;
    }
    if (a[x][y] != 0)
    {
        if (y == 8) 
            dfs(x + 1, 0);
        else 
            dfs(x, y + 1);
    }
    else{
            for(int i = 1; i<=9; i++)
            if (!vis[0][x][i] && 
                !vis[1][y][i] && 
                !vis[2][x / 3 * 3 + y / 3][i])
            {
                a[x][y] = i;
                vis[0][x][i] = 1;
                vis[1][y][i] = 1;
                vis[2][x / 3 * 3 + y / 3][i] = 1;
                if (y == 8) 
                    dfs(x + 1, 0);
                else dfs(x, y + 1);
                a[x][y] = 0;
                vis[0][x][i] = 0;
                vis[1][y][i] = 0;
                vis[2][x / 3 * 3 + y / 3][i] = 0;
            }
        }
  
}
int main()
{
    int c;
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            scanf("%d", &c);
            if (c == 0)
            {
                a[i][j] = 0;
            } 
            else 
            {
                a[i][j] = c - '0';
                vis[0][i][a[i][j]] = 
                vis[1][j][a[i][j]] = 
                vis[2][i / 3* 3 + j / 3][a[i][j]] = 1;
            }
        }
    }
    
    dfs(0, 0);
    return 0;
}
2021/8/21 19:37
加载中...