poj解题报告——2676

来源:互联网 发布:手机信号测试软件 编辑:程序博客网 时间:2024/04/29 07:59

        这题是数独游戏,直接暴力深搜吧

代码如下

#include<stdio.h>int sign;int num[9][9];void Input(){    int i,j;    for(i=0;i<9;i++)        for(j=0;j<9;j++)        scanf("%1d",&num[i][j]);}void Output(){    int i,j;    for (i=0;i<9;i++)    {        for(j=0;j<9;j++)        {            printf("%d",num[i][j]);        }        printf("\n");    }}int Check(int n,int key){    int i,j;    int x,y;    for(j=0;j<9;j++)     {        i=n/9;        if(num[i][j]==key) return 0;    }    for(i=0;i<9;i++)    {        j=n%9;        if(num[i][j]==key)return 0;    }    x=n/9/3*3;    y=n%9/3*3;    for(i=x;i<x+3;i++)    {        for(j=y;j<y+3;j++)        {            if(num[i][j]==key)return 0;        }    }    return 1;}int DFS(int n){    int i;    if (n>80)    {        sign=1;        return 0;    }    if(num[n/9][n%9]!=0)    {        DFS(n+1);    }    else    {        for(i=1;i<=9;i++)        {            if(Check(n,i)==1)            {                num[n/9][n%9]=i;                DFS(n+1);                if(sign==1) return 0;                num[n/9][n%9]=0;            }        }    }}void main(){    int test,i,j;    scanf("%d",&test);    while(test--)    {sign=0;    Input();    DFS(0);    Output();    }}


0 0
原创粉丝点击