• 搜索----hdu 5547


    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5547

    数独,保证每一行每一列都有1,2,3,4

    还有4 个2 * 2的小方块儿里也必须是1,2,3,4

    输入:

    3
    ****
    2341
    4123
    3214
    *243
    *312
    *421
    *134
    *41*
    **3*
    2*41
    4*2*

    输出:

    Case #1:
    1432
    2341
    4123
    3214
    Case #2:
    1243
    4312
    3421
    2134
    Case #3:
    3412
    1234
    2341
    4123
    #include<stdio.h>  
    #include<string.h>  
    using namespace std;  
    char a[100][100];  
    int panduan(int row,int col)  
    {  
        for(int i=0;i<4;i++)  
        {  
            if(a[row][i]==a[row][col]&&i!=col)  
            return 0;  
        }  ///判断该数字是否可以存在这一行里
        for(int i=0;i<4;i++)  
        {  
            if(a[i][col]==a[row][col]&&i!=row)  
            return 0;  
        }  ///判断该数字是否可以存在这一列里
        int mrow=row;  
        int mcol=col;  
        if(row%2==1)row-=1;  
        if(col%2==1)col-=1;  
        for(int i=row;i<=row+1;i++)  
        {  
            for(int j=col;j<=col+1;j++)  
            {  
                {  
                    if(a[i][j]==a[mrow][mcol]&&i!=mrow&&j!=mcol)return 0;  
                }  
            }  
        }  ///判断2*2的小方框里是不是1,2,3,4
        return 1;  
    }  
    void dfs(int cur)  
    {  
        
        if(cur==4*4)///如果到达最后一个点则输出全部
        {  
            for(int i=0;i<4;i++)  
            {  
                for(int j=0;j<4;j++)  
                {  
                    printf("%c",a[i][j]);  
                }  
                printf("
    ");  
            }  
            return ;  
        }  
        int row=cur/4;///
        int col=cur%4;  ///
        if(a[row][col]=='*')  
        {  
            for(int j=1;j<=4;j++)  ///吧1,2,3,4每个数都试一遍
            {  
                a[row][col]=j+'0';  
                if(panduan(row,col)==1)  ///符合条件则进入下一个点
                {  
                    dfs(cur+1);  
                }  
                a[row][col]='*';  ///取消标记
            }  
        }  
        else  
        {  
            dfs(cur+1);  
        }  
    }  
    int main()  
    {  
        int kase=0;  
        int t;  
        scanf("%d",&t);  
        while(t--)  
        {  
            for(int i=0;i<4;i++)  
            {  
                scanf("%s",a[i]);  
            }  
            printf("Case #%d:
    ",++kase);  
            dfs(0);  
        }  
        return 0;  
    }  
  • 相关阅读:
    python+selenium截图
    selenium鼠标事件
    python位置参数、默认参数、关键字参数、可变参数的区别
    元素定位
    selenium下拉框选择
    mysql计算日期的函数
    python列表操作
    requests库及请求封装
    什么是接口测试?如何进行接口测试
    类和实例
  • 原文地址:https://www.cnblogs.com/biu-biu-biu-/p/5738337.html
Copyright © 2020-2023  润新知