怎么改也改不对,有没有大佬救救孩子
  • 板块P1784 数独
  • 楼主黑客旋风
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/7/8 21:26
  • 上次更新2023/11/4 18:22:18
查看原帖
怎么改也改不对,有没有大佬救救孩子
59289
黑客旋风楼主2021/7/8 21:26
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
bool b[10][10][10];
int c[10][10]=
{
    0,0,0,0,0,0,0,0,0,0,
    0,1,1,1,2,2,2,3,3,3,
    0,1,1,1,2,2,2,3,3,3,
    0,1,1,1,2,2,2,3,3,3,
    0,4,4,4,5,5,5,6,6,6,
    0,4,4,4,5,5,5,6,6,6,
    0,4,4,4,5,5,5,6,6,6,
    0,7,7,7,8,8,8,9,9,9,
    0,7,7,7,8,8,8,9,9,9,
    0,7,7,7,8,8,8,9,9,9,
};
void add(int nbr,int x,int y);
void jian(int nbr,int x,int y);
void pd()
{
    for(int i=1;i<=9;i++)
    {
        for(int j=1;j<=9;j++)
    {
        cout<<a[i][j]<<' ';
    }
    cout<<endl;
    }
    cout<<endl;
    for(int i=1;i<=9;i++)
    {
        for(int j=1;j<=9;j++)
        {
            int sum=0;
            for(int k=1;k<=9;k++)
                sum+=b[i][j][k];
            cout<<sum<<' ';
        }
        cout<<endl;
    }
}
void dfs(int xi,int x,int y)
{
    int x=(xi-1)/9+1;
    int y=(xi-1)%9+1;
//    cout<<xi<<' '<<x<<' '<<y<<endl;
    if(xi>81)
    {
        pd();
        exit(0);
        return ;
    }
    else if(a[x][y]==0)
    {
        for(int i=1;i<=9;i++)
        {
            if(b[x][y][i]==0)
            {
                a[x][y]=i;
                add(i,x,y);
               /// xi++;
                dfs(xi+1);
               /// xi--;
                jian(i,x,y);
                a[x][y]=0;
            }
        }
    }
    else dfs(xi+1);
}
int main()
{
    for(int i=1;i<=9;i++)
        for(int j=1;j<=9;j++)
    {
        cin>>a[i][j];
        if(a[i][j])
        add(a[i][j],i,j);
    }
    dfs(1);
    return 0;
}
void add(int nbr,int x,int y)
{
    for(int i=1;i<=9;i++)
    {
        b[i][y][nbr]=1;
        b[x][i][nbr]=1;
    }
    int p=c[x][y];
    cout<<p<<endl;
    for(int i=1;i<=9;i++)
        for(int j=1;j<=9;j++)
        if(c[i][j]==p)
    {
        b[i][j][nbr]=1;
    }
}
void jian(int nbr,int x,int y)
{
    for(int i=1;i<=9;i++)
    {
        b[i][y][nbr]=0;
        b[x][i][nbr]=0;
    }
    int p=c[x][y];
        cout<<p<<endl;
    for(int i=1;i<=9;i++)
        for(int j=1;j<=9;j++)
        if(c[i][j]==p)
    {
        b[i][j][nbr]=0;
    }
}


2021/7/8 21:26
加载中...