zoukankan      html  css  js  c++  java
  • hdu 5547

    ***题意:4*4数独,要求在同一行同一列不能有相同的数字,另外在2*2的小单元里也不能有相同的数字

    思路:DFS暴力搜索, 每个位置填1—4,递归回溯,判断是否符合条件,递归到最后一个位置+1则输出答案***

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<cctype>
    #include<queue>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    typedef long long LL;
    #define N 1001000
    #define INF 0x3f3f3f
    
    char maps[10][10];
    
    int judge(int row, int col)
    {
        for(int i=0; i<4; i++)
        {
            if(maps[row][i]==maps[row][col]&&i!=col)
                return 0;
        }
        for(int i=0; i<4; i++)
        {
            if(maps[i][col]==maps[row][col]&&i!=row)
                return 0;
        }
    
        int Row, Col;
        if(row%2==1) Row=row-1;
        else Row=row;
    
        if(col%2==1) Col=col-1;
        else Col=col;
    
        for(int i=Row; i<=Row+1; i++)
        {
            for(int j=Col; j<=Col+1; j++)
            {
                if(maps[i][j]==maps[row][col]&&i!=row&&j!=col)
                    return 0;
            }
        }
        return 1;
    }
    
    void DFS(int t)
    {
        if(t==16)
        {
            for(int i=0; i<4; i++)
                puts(maps[i]);
            return ;
        }
    
        int row=t/4;//行列转换方法,知道如何转换,就可以运用递归去求解了
        int col=t%4;
    
        if(maps[row][col]=='*')
        {
            for(int i=1; i<=4; i++)
            {
                maps[row][col]=i+'0';
                if(judge(row, col))
                    DFS(t+1);
    
                maps[row][col]='*';
            }
        }
        else
            DFS(t+1);
    }
    
    int main()
    {
        int T, cas=1;
        scanf("%d", &T);
    
        while(T--)
        {
            for(int i=0; i<4; i++)
                scanf("%s", maps[i]);
    
            printf("Case #%d:
    ", cas++);
    
            DFS(0);
        }
        return 0;
    }
  • 相关阅读:
    git分支
    git使用
    多人协作
    python初心记录二
    python初心记录一
    Javascript 概念类知识
    想成为前端工程师?希望读完这篇文章能对你有所帮助。
    Egret note
    cocos2d-js 连连看
    PS置入图片之后保留选区方便C图
  • 原文地址:https://www.cnblogs.com/9968jie/p/5734322.html
Copyright © 2011-2022 走看看