zoukankan      html  css  js  c++  java
  • hdu Sudoku Killer

    简单的dfs,主要就是每个?处填的值是否满足条件的判断。这道题感觉考察的是输出格式的控制。

    #include"iostream"
    #include"stdio.h"
    #include"algorithm"
    #include"cmath"
    #include"string.h"
    #include"string"
    #define mx 1005
    using namespace std;
    int shudu[100][100];
    int num,icase;
    bool flag;
    struct node
    {
        int x,y;
    }position[mx];
    
    bool check(int num,int cur)
    {
        int i,j;
        for(i=0;i<9;i++)
        {
            if(i==position[cur].x) continue;
            if(num==shudu[i][position[cur].y]) return false;
        }
        for(j=0;j<9;j++)
        {
            if(j==position[cur].y) continue;
            if(num==shudu[position[cur].x][j]) return false;
        }
        int xx=position[cur].x,yy=position[cur].y;
        xx=(xx/3)*3;yy=(yy/3)*3;
        for(i=xx;i<xx+3;i++)
        {
            for(j=yy;j<yy+3;j++)
            {
                if(i==position[cur].x&&j==position[cur].y) continue;
                if(num==shudu[i][j]) return false;
            }
        }
        return true;
    }
    void dis()
    {
        if(icase++) cout<<endl;
          for(int i=0;i<9;i++)
            {
                cout<<shudu[i][0];
                for(int j=1;j<9;j++)
                    cout<<' '<<shudu[i][j];
                cout<<endl;
            }
    }
    void dfs(int  step)
    {
       if(flag) return;
       if(step==num)
       {
           dis();
           flag=true;
           return;
       }
       for(int i=1;i<=9;i++)
       {
           if(check(i,step))
           {
               shudu[position[step].x][position[step].y]=i;
               dfs(step+1);
               shudu[position[step].x][position[step].y]=0;
           }
       }
    }
    int main()
    {
        int i,j;
        icase=0;
        char s[3];
        while(scanf("%s",s)!=EOF)
        {
            flag=false;
            num=0;
            if(s[0]=='?')
            {
                position[num].x=0;position[num++].y=0;shudu[0][0]=0;
            }
            else shudu[0][0]=s[0]-'0';
            for(i=0;i<9;i++)
            {
                for(j=0;j<9;j++)
                {
                    if(i==0&&j==0) continue;
                    scanf("%s",s);
                    if(s[0]=='?')
                    {
                         position[num].x=i;position[num++].y=j;shudu[i][j]=0;
                    }
                    else
                    {
                        shudu[i][j]=s[0]-'0';
                    }
                }
            }
            dfs(0);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    模拟实现bind、call、apply函数
    模拟实现ECMAScript5新增的数组方法
    HBuilder mui页面间传值的几种方式
    手机端软键盘弹出挤压页面的问题
    js获取当前时间
    原生js根据class获取元素的方法
    jquery之获取select选中的值
    原生js获取元素属性值方法
    利用javascrit获取url传递的参数
    jQuery图片预加载(延迟加载)之插件Lazy Load
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4442001.html
Copyright © 2011-2022 走看看