构造数独

来源:互联网 发布:人事管理数据流程图 编辑:程序博客网 时间:2024/03/29 20:42
#include<iostream>#include<ctime>using namespace std;bool valid(int sudoku[][9],int m,int n){    int tmp=sudoku[m][n];    int i,j,k,l;    for(i=0;i<9;i++)    {        if(i!=m&&sudoku[i][n]==tmp)return false;    }    for(j=0;j<9;j++)    {        if(j!=n&&sudoku[m][j]==tmp)return false;    }    i=m/3*3;    j=n/3*3;    for(k=i;k<i+3;k++)    {        for(l=j;l<j+3;l++)        {            if((k!=m||l!=n)&&sudoku[k][l]==tmp)return false;        }    }    return true;}void create_sudoku(int sudoku[][9]){    int i,j,k=0;    while(1)    {        i=k/9;        j=k%9;        while(1)        {            sudoku[i][j]++;            if(sudoku[i][j]==10)            {                sudoku[i][j]=0;                if(k>0)k--;                break;            }            else if(valid(sudoku,i,j))            {                k++;                break;            }        }        if(k==81)        {            for(i=0;i<9;i++)            {                for(j=0;j<9;j++)cout<<sudoku[i][j]<<' ';                cout<<endl;            }            break;        }    }}int main(){    int i,tmp;    int sudoku[9][9]={0};    srand((unsigned)time(0));    for(i=1;i<=9;i++)    {        tmp=rand()%81;        sudoku[tmp/9][tmp%9]=i;    }    create_sudoku(sudoku);    return 0;}




0 0
原创粉丝点击