40 #1 WA #4#5 TLE 求助
  • 板块P1784 数独
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/22 22:52
  • 上次更新2023/12/23 10:12:10
查看原帖
40 #1 WA #4#5 TLE 求助
964091
封禁用户楼主2023/12/22 22:52
#include <iostream>
#include <cmath>
using namespace std;
char a[15][15];
int n,m,b[15][15],c[15][15],d[15][15];
void dfs(int x,int y)
{
//	for(int i = 1;i <= n;i ++)
//        {
//            for(int j = 1;j <= m;j ++)cout << a[i][j] << " ";
//            cout << endl;
//        }
//    cout << "\n\n\n\n";
    if(x > n)
    {
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 1;j <= m;j ++)cout << a[i][j] << " ";
            cout << endl;
        }
        exit(0);
    }
    int o = x,p = y + 1;
    if(p > m)o ++,p = 1;
    if(a[x][y] != '0')dfs(o,p);
    else
    {
        for(int i = 1;i <= 9;i ++)
        {
            if(b[x][i] || c[y][i] || d[(x / 3) * 3 + int(ceil(y / 3.0))][i])continue ;
            a[x][y] = i + 48; 
            b[x][i] = 1;
            c[y][i] = 1;
            d[(x / 3) * 3 + int(ceil(y / 3.0))][i] = 1;
            dfs(o,p);
            a[x][y] = 48;
            b[x][i] = 0;
            c[y][i] = 0;
            d[(x / 3) * 3 + int(ceil(y / 3.0))][i] = 0;
        }
        return ;
    }
    return ;
}
int main()
{
    n = m = 9;
    for(int x = 1;x <= n;x ++)
        for(int y = 1;y <= m;y ++)
        {
            cin >> a[x][y];
            if(a[x][y] != '0')
            {
                b[x][a[x][y] - '0'] = 1;
                c[y][a[x][y] - '0'] = 1;
                d[(x / 3) * 3 + int(ceil(y / 3.0))][a[x][y] - '0'] = 1;
            }
        }
    dfs(1,1);
}
2023/12/22 22:52
加载中...