Sudoku---hdu2676(数独DFS)

http://poj.org/problem?id=2676

递归深搜

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<iostream>

using namespace std;

#define N 100
#define INF 0xffffffff
#define memset(a,b) memset(a,b,sizeof(a))

int a[15][15];

struct node
{
    int x,y;
} e[N];
int sum;

int v1[N][N],v2[N][N],v3[N][N], ok;

void DFS(int p)
{

    if(p>sum)
    {
        ok=1;
        return;
    }

    for(int i=1; i<=9; i++)
    {
        if(!ok)
            if(v1[e[p].x][i]==0 && v2[e[p].y][i]==0 && v3[(e[p].x/3)*3+e[p].y/3][i]==0)
            {
                a[e[p].x][e[p].y]=i;
                v1[e[p].x][i]=1;
                v2[e[p].y][i]=1;
                v3[(e[p].x/3)*3+e[p].y/3][i]=1;

                DFS(p+1);

                //  a[e[p].x][e[p].y]=0;
                v1[e[p].x][i]=0;
                v2[e[p].y][i]=0;
                v3[(e[p].x/3)*3+e[p].y/3][i]=0;
            }
    }
}

int main()
{
    int T;
    scanf("%d ",&T);
    while(T--)
    {
        memset(v1,0);
        memset(v2,0);
        memset(v3,0);
        ok=sum=0;
        char str[N];
        for(int i=0; i<9; i++)
        {
            scanf("%s",str);
            for(int j=0; j<9; j++)
            {
                a[i][j]=str[j]-‘0‘;
                if(a[i][j]!=0)
                {
                    v1[i][a[i][j]]=1;
                    v2[j][a[i][j]]=1;
                    v3[(i/3)*3+j/3][a[i][j]]=1;
                }
                else
                {
                    sum++;
                    e[sum].x=i;
                    e[sum].y=j;
                }
            }
        }
        DFS(1);
        for(int i=0; i<9; i++)
        {
            for(int j=0; j<9; j++)
            {
                printf("%d",a[i][j]);
            }
            printf("\n");
        }

    }
    return 0;
}
时间: 2024-10-26 14:45:56

Sudoku---hdu2676(数独DFS)的相关文章

poj Sudoku(数独) DFS

Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13665   Accepted: 6767   Special Judge Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure.

POJ 2676 Sudoku (数独 DFS)

Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14368   Accepted: 7102   Special Judge Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some

HDU 1426 Sudoku Killer(dfs 解数独)

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1426 Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9804    Accepted Submission(s): 2944 Problem Description 自从2006年3月10日至11日的首届数独世界

HDU 1426 Sudoku Killer【DFS 数独】

自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单独的项目进行比赛,冠军将有可能获得的一份巨大的奖品———HDU免费七日游外加lcy亲笔签名以及同hdu acm team合影留念的机会. 所以全球人民前仆后继,为了奖品日夜训练茶饭不思.当然也包括初学者linle,不过他太笨了又没有多少耐性,只能做做最最基本的数独题,不过他还是想得到那些奖品,你能帮帮他吗?你只要把答案告诉他就可以,不用教他是怎么做的

poj 2676 Sudoku (基础DFS)

Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15456   Accepted: 7574   Special Judge Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure.

HDU 1426 Sudoku Killer(数独,划分区域是关键)

Sudoku Killer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6283    Accepted Submission(s): 1981 Problem Description 自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为一个单

POJ 2676 数独(DFS)

Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21612   Accepted: 10274   Special Judge Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure.

36. Valid Sudoku/37. Sudoku Solver - 数独问题-- backtracking 经典

题意: 经典的递归题, 要求:除了要求 横竖都填满 1~9外, 每个3*3也都要求满足 1~9 36. 数组可以部分填充, 问是否一个有效的 sudoku. 写了个好烧脑的 四重循环来check 3*3 的部分.  重点在于 用数组作为hash . 然后对于 check 3*3 部分, 其实就是9个小方块,  9个小方块 定点坐标为 [0 0] [0 3] [06] [3 0] [3 3 ] [3 6] [6 0] [ 6 3] [6 6] ,每个顶点递增为横竖 递增都 3 , 因此写了个二重循

2018 Multi-University Training Contest 4 Problem J. Let Sudoku Rotate 【DFS+剪枝+矩阵旋转】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6341 Problem J. Let Sudoku Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1363    Accepted Submission(s): 717 Problem Description Sudoku i

POJ 3074&amp;&amp;2676 数独DFS

经典数独问题 用DFS模拟数独解法,找摒除解和余数解 数独解法:http://www.sudokufans.org.cn/forums/topic/8/ 2676 #include "stdio.h" #include "string.h" struct node { int x,y; int s[10]; // 对于每个空格,数字i是否可用 int sum; // 对于每个空格,一共可以填入的数字种数 }order[101]; int cnt; // 总空格数 c