【ZOJ】2580【搜索】【suduku】

原创 2013年12月03日 11:13:00


Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output
143628579
572139468
986754231
391542786

468917352
725863914

237481695
619275843
854396127

*******************************************************************************************************************


#include<stdio.h>
struct shu{
    int date;
    int x;
    int y;
} shu[9][9];
int DFS(int i,int j){
    int s,t,m;
    if(j==9){
        j=0;
        i++;
        if(i==9)
            return 1;//全部填满
    }
    while(shu[i][j].date){
        j++;
        if(j==9)
        {
            j=0;
            i++;
            if(i==9)
                return 1;
        }
    }
    for(m=1; m<10; m++){
        for(s=0; s<9; s++){
            if(shu[i][s].date==m)
                break;
            if(shu[s][j].date==m)
                break;
        }
        if(s==9){
            for(s=shu[i][j].x-3; s<shu[i][j].x; s++){
                for(t=shu[i][j].y-3; t<shu[i][j].y; t++)
                    if(m==shu[s][t].date)
                        break;
                if(t<shu[i][j].y)
                    break;
            }
            if(s==shu[i][j].x){
                shu[i][j].date=m;
                if(DFS(i,j+1))//成功
                    return 1;
                shu[i][j].date=0;
            }
        }
    }
    return 0;
}
int main(){
    int n,i,j;
    scanf("%d",&n);
    for(i=0; i<9; i++){
        for(j=0; j<9; j++){
            if(i>=0&& i<3)
                shu[i][j].x=3;
            else if(i>=3 &&i<6)
            shu[i][j].x=6;
            else
                shu[i][j].x=9;
            if(j>=0&& j<3)
                shu[i][j].y=3;
            else if(j>=3 &&j<6)
            shu[i][j].y=6;
            else
                shu[i][j].y=9;
        }
    }
    while(n--){
        for(i=0; i<9; i++){
            getchar();
            for(j=0; j<9; j++)
            {
                scanf("%c",&shu[i][j].date);
                shu[i][j].date-=48;
            }
        }
        DFS(0,0);
        for(i=0; i<9; i++){
            for(j=0; j<9; j++)
                printf("%c",shu[i][j].date+48);
            printf("\n");
        }
    }
    return 0;
}


相关文章推荐

ZOJ 2580 Sudoku (DFS)

题意的话没什么好说的,一般都玩过数独游戏.大概都了解规则.就是一个数独题目,以数字 0表示空格,要求任意一个正确解. 看到题目想到就是暴力搜索,但是忽略了规模,过于暴力的搜索把所有可能性都...

暑假练习--hdoj--搜索--suduku

这个题必须要写一篇博客了……这个题算是做过的最久的一道题吧。想了很长时间,一直没想好怎么做。要保证每一行每一列还有没个格子都不重复,行和列还好说,每个格子不一样不知道怎么做。搜索的话,开始是想几个方向...

POJ 3074 suduku

#include #include #include #include using namespace std; char sudoku[100]; const int N = 9; const...

HDU 2486 (HDU 2580, POJ 3922) A simple stone game K倍动态减法游戏

题目大意: 就是现在有一堆石子, 然后先手第一次取走任意数量(至少1颗, 不能取完), 然后双方轮流拿石子的时候, 拿走的数量不能超过上一次被拿走石子数的K倍, 拿走最后一颗石子的人获胜, 给出n,...

POJ3922 、HDU2486、HDU2580坑爹的博弈,一般人想五个小时也想不出啊!!

转载请注明出处:http://blog.csdn.net/cxb569262726/article/details/7841521 题目链接: http://poj.org/problem...

HDU_2580 A simple stone game

刚开始看这一题时,就知道这根本不是一道简单题(对没学K倍

Prolog 9*9 数独 SUDUKU

  • 2015年10月04日 20:26
  • 2KB
  • 下载

Trie树简介 ( 洛谷P2580题解 )

又称单词查找树,字典树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。...

[洛谷 2580] 于是他错误的点名开始了 (字典树)

题目背景XS中学化学竞赛组教练是一个酷爱炉石的人。他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900)。题目...
  • xljer_
  • xljer_
  • 2017年05月16日 09:50
  • 152

hdu2486 hdu2580 poj3922 A simple stone game--K倍动态减法游戏 博弈

A simple stone game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【ZOJ】2580【搜索】【suduku】
举报原因:
原因补充:

(最多只允许输入30个字)