数独游戏

来源:互联网 发布:磐石软件 编辑:程序博客网 时间:2024/05/22 12:25

数独游戏

时限:1000ms 内存限制:10000K 总时限:3000ms

描述

数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。

输入

一个9*9的矩阵,0表示该位置是空白。

输出

一个9*9的矩阵,格式与输入类似。

输入样例

900050060
020070100
300102040
703800529
000345000
516009403
050208006
007090010
030010004

输出样例

971453268
428976135
365182947
743861529
892345671
516729483
154238796
687594312
239617854

#include<iostream>using namespace std;void search(int m);int check(int m);void output();int a[9][9];char t[9][9];int main(){    int i,j;    for(i=0;i<9;i++)//输入数独    {        for(j=0;j<9;j++)        {            cin>>t[i][j];        }    }    for(i=0;i<9;i++)//转换为整形    {        for(j=0;j<9;j++)        {            a[i][j]=t[i][j]-'0';        }    }    search(0);    return 0;}void search(int m){    if(m==81)//满足条件,输出    {        output();    }    else    {        if(a[m/9][m%9]==0)//此格为空,开始试探        {            for(int i=1;i<=9;i++)//逐个试探            {                a[m/9][m%9]=i;                if(check(m))//满足检查条件,搜索下一格                {                    search(m+1);                    a[m/9][m%9]=0;//如果没有一直搜下去,则返回继续试探当前格                }                else//不满足条件,继续试探                {                    a[m/9][m%9]=0;                }            }        }        else//此格非空,继续搜索        {            search(m+1);        }    }}int check(int m)//检测{    int i,j;    int up,down,left,right;    up=m/9/3*3;//框定当前搜索格所在宫    down=up+3;    left=m%9/3*3;    right=left+3;    for(i=0;i<9;i++)//检测横行竖行    {        if((a[i][m%9]==a[m/9][m%9]&&i!=m/9)||(a[m/9][i]==a[m/9][m%9]&&i!=m%9))        {            return 0;        }    }    for(i=up;i<down;i++)//检测所在宫    {        for(j=left;j<right;j++)        {            if(a[i][j]==a[m/9][m%9]&&i!=m/9&&j!=m%9)            {                return 0;            }         }    }    return 1;}void output()//输出结果{    for(int i=0;i<9;i++)    {        for(int j=0;j<8;j++)        {            cout<<a[i][j];        }        cout<<a[i][8]<<endl;    }}
原创粉丝点击