zoukankan      html  css  js  c++  java
  • 数独DFS实现

    #include <stdio.h>
    #include <math.h>

    #define N 9 //默认为9x9的数独

    typedef struct
    {
    int x;
    int y;
    } Point;
    Point P[N*N];
    int A[N][N];
    int Cnt,Flag;

    void Init()
    {
    int i,j;
    Cnt=Flag=0;
    char Str[N];
    for(i=0;i<N;++i)
    {
    scanf("%s",Str);
    for(j=0;j<N;++j)
    {
    if(Str[j]=='?')
    {
    A[i][j]=0;
    P[Cnt].x=i;
    P[Cnt].y=j;
    ++Cnt;
    }
    else
    {
    A[i][j]=Str[j]-'0';
    }
    }
    }
    return;
    }

    int Judge(int n,int k)
    {
    int i,j,x,y,temp;
    for(i=0;i<N;++i)
    {
    if(A[P[n].x][i]==k&&i!=P[n].y)
    {
    return 0;
    }
    if(A[i][P[n].y]==k&&i!=P[n].x)
    {
    return 0;
    }
    }
    temp=sqrt(N);
    x=(P[n].x/temp)*temp;
    y=(P[n].y/temp)*temp;
    for(i=0;i<temp;++i)
    {
    for(j=0;j<temp;++j)
    {
    if(A[x+i][y+j]==k&&((x+i)!=P[n].x||(y+j)!=P[n].y))
    {
    return 0;
    }
    }
    }
    return 1;
    }

    void DFS(int n)
    {
    int i;
    if(n==Cnt)
    {
    Flag=1;
    return;
    }
    for(i=1;i<=N;++i)
    {
    if(1==Judge(n,i))
    {
    A[P[n].x][P[n].y]=i;
    DFS(n+1);
    if(Flag==1)
    {
    return;
    }
    A[P[n].x][P[n].y]=0;
    }
    }
    return;
    }

    void Show()
    {
    int i,j;
    for(i=0;i<N;++i)
    {
    for(j=0;j<N;++j)
    {
    printf("%d",A[i][j]);
    }
    printf("\n");
    }
    return;
    }

    int main()
    {
    Init();
    DFS(0);
    Show();
    return 0;
    }

    对于给定图为:

    输入应为:

    426?397??
    1??????6?
    ??98?????
    5?????1??
    2??458???
    98?7??5??
    6?7??3??5
    ?????14??
    ???????2?

    返回结果:

    426139758
    138275964
    759864231
    564392187
    271458693
    983716542
    647923815
    392581476
    815647329 

  • 相关阅读:
    <dependency>
    json、javaBean、xml互转的几种工具介绍
    日志系统logBack的配置以及sdoutAppender控制台输出
    Java中Main函数探讨
    java的Daemon守护线程
    FastJson序列化对象
    多线程情况下获取数据出现的不一致
    苏州地区--校招IT公司
    Spark聚合操作:combineByKey()
    Hadoop初步简介
  • 原文地址:https://www.cnblogs.com/NoSoul/p/2236397.html
Copyright © 2011-2022 走看看