【oj】靶形数独

原创 2018年04月15日 08:47:11
#include<stdio.h>
#include<math.h>
#include<memory.h>
int sudoku[10][10],piece[30][10],line[10][10],row[10][10],result=-1;


int max(int a,int b){
    if(a>b)return a;
    else
        return b;
}


void dfs(){
    int i,j,count=10,marki,markj;
    int k;
    for(i=1;i<10;i++){
        for(j=1;j<10;j++){
            if(!sudoku[i][j]){
                int tempcount=0;
                for(k=1;k<10;k++){
                    if(!piece[(i-1)/3*3+(j-1)/3+1][k] && !row[i][k] &&!line[j][k])tempcount++;
                }
                if(tempcount<count){
                    count=tempcount;
                    marki=i;
                    markj=j;
                }
            }
        }
    }
    if(count==10){
        int tempresult=0;
        for(i=1;i<10;i++){
            for(j=1;j<10;j++){
                tempresult+=sudoku[i][j]*(10-max(abs(i-5),abs(j-5)));
            }
        }
        result=max(tempresult,result);
        return;
    }
    for(k=1;k<10;k++){
            if(!piece[(marki-1)/3*3+(markj-1)/3+1][k]&&!row[marki][k]&&!line[markj][k]){
                piece[(marki-1)/3*3+(markj-1)/3+1][k]=1;
                row[marki][k]=1;
                line[markj][k]=1;
                sudoku[marki][markj]=k;
                dfs();
                piece[(marki-1)/3*3+(markj-1)/3+1][k]=0;
                row[marki][k]=0;
                line[markj][k]=0;
                sudoku[marki][markj]=0;
            }
    }
}

int main(){
    int i,j;
    memset(piece,0,sizeof(piece));
    memset(line,0,sizeof(line));
    memset(row,0,sizeof(row));
    for(i=1;i<10;i++){
        for(j=1;j<10;j++){
            scanf("%d",&sudoku[i][j]);
            piece[(i-1)/3*3+(j-1)/3+1][sudoku[i][j]]=1;
            row[i][sudoku[i][j]]=1;
            line[j][sudoku[i][j]]=1;
        }
    }
        dfs();
        printf("%d",result);
        return 0;
}

ArcGIS for JavaScript 空间分析

主要内容: 第一节 空间分析简介(完结) 第二节GeometryService 简介(完结) 第三节GeometryService-周长和面积(完结) 第四节GeometryService-凸边形计算方法(完结) 第五节GeometryService - 缓冲分析(完结) 等课程
  • 2017年06月02日 15:21

初中OJ1837. 【NOIP2009TG】靶形数独

题目分析: 给你一个未完成的数独,数独内的每个格子都有一个分值,数独的分值就是每个格子乘以当前的分值的和。求能获得的最大分值。 正解:这题一眼看下去就是一道回溯。只不过如果按照普通的回溯来做,肯定...
  • gmh77
  • gmh77
  • 2016-12-19 20:07:10
  • 141

【NOIP2009】靶形数独 DLX(Dancing Links)

[NOIP2009]靶形数独 T4 Time Limit: 2 Sec  Memory Limit: 128 MB Description   小城和小华都是热爱数学的好学生,最近,...
  • Vmurder
  • Vmurder
  • 2014-10-30 20:01:10
  • 1679

NOIP2009 靶形数独(搜索)

以前做过一道hdu类似的数独题,那道题我没有加什么优化就过了,然后这道题不加优化可以得50~80分,要上80分就必须要优化 可以用位运算保存每一行每一列每个九宫格内已经使用的数,例如userow[i...
  • cqbzwja
  • cqbzwja
  • 2015-08-10 21:01:54
  • 1346

noip2009 靶形数独 (搜索)

1755靶形数独 Accepted 标签:搜索NOIP提高组2009 描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地...
  • yuyanggo
  • yuyanggo
  • 2015-09-24 15:20:20
  • 828

【NOIP2009】靶形数独 题解

【题目名称】靶形数独 【题目来源】NOIP2009 【时间限制】2000ms 【空间限制】128M 问题描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数...
  • lym01803
  • lym01803
  • 2016-09-01 00:20:49
  • 2032

【wikioi】1174靶形数独

DFS爆搜,相当慢…… #include #include #include #include const int M = 10; const int p[10][10] = { {0...
  • u012837895
  • u012837895
  • 2014-05-14 21:23:48
  • 771

NOIP2009靶形数独——位运算优化DFS

题目在此 一道位运算优化DFS题目(大神们各种Dancing Link ORZ) 然而听说这题可以直接从右下角开始爆搜(YoungTree:强行把一道爆搜题做成位运算  我:Excuse me?)...
  • u014120397
  • u014120397
  • 2016-06-01 14:05:59
  • 424

NOIP2009靶形数独

题目来源:https://www.luogu.org/problem/show?pid=1074#sub 相当繁琐的dfs,TLE了许多次,终于AC了。 状态压缩来记录每个格子所在...
  • moon_sky1999
  • moon_sky1999
  • 2016-11-09 10:21:10
  • 190

codevs1174 靶形数独 dfs+剪枝

题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教...
  • update7
  • update7
  • 2017-03-25 21:11:58
  • 50147
收藏助手
不良信息举报
您举报文章:【oj】靶形数独
举报原因:
原因补充:

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