• poj 2676 Sudoku


    题意:完成9*9的数独。

    思路:直接DFS即可,判断该数是否在该行、该列、该九格中出现过。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #include <string>
    #include <math.h>
    #include <map>
    using namespace std;
    int d[10][10];//存储整个矩阵
    int p[100][2];//存储需要填的点
    int k;//需要填的点的个数
    bool x[10][10],y[10][10],z[10][10];//标记数组
    bool dfs(int v)
    {
        if(v==k) return true;
        for(int i=1;i<10;i++)
        {
            if(!x[p[v][0]][i] && !y[p[v][1]][i] && !z[p[v][0]/3*3+p[v][1]/3][i])
            {
                d[p[v][0]][p[v][1]]=i;
                x[p[v][0]][i] = true;
                y[p[v][1]][i] = true;
                z[p[v][0]/3*3+p[v][1]/3][i]=true;
                if(dfs(v+1)) return true;
                d[p[v][0]][p[v][1]]=0;
                x[p[v][0]][i] = false;
                y[p[v][1]][i] = false;
                z[p[v][0]/3*3+p[v][1]/3][i]=false;
            }
        }
        return false;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            char s[10];
            memset(d,0,sizeof(d));
            memset(p,0,sizeof(p));
            memset(x,0,sizeof(x));
            memset(y,0,sizeof(y));
            memset(z,0,sizeof(z));
            k=0;
            for(int i=0;i<9;i++)
            {
                scanf(" %s",s);
                for(int j=0;j<9;j++)
                {
                    d[i][j]=s[j]-'0';
                    if(d[i][j]==0)
                    {
                        p[k][0]=i;
                        p[k++][1]=j;
                    }
                    else
                    {
                        x[i][d[i][j]]=true;
                        y[j][d[i][j]]=true;
                        z[i/3*3+j/3][d[i][j]]=true;
                    }
                }
            }
            dfs(0);
            for(int i=0;i<9;i++)
            {
                for(int j=0;j<9;j++)
                {
                    printf("%d",d[i][j]);
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    通知协议KVO的用法
    UIImageView用法
    默默的学习!
    多输入参数的方法
    一本书的摘录
    实例、局部、静态变量(java)
    分数相加的例题
    类的继承
    多线程
    单例
  • 原文地址:https://www.cnblogs.com/zuferj115/p/7737427.html
Copyright © 2020-2023  润新知