codevs 1174 靶形数独 (启发式搜索)

启发式搜索算法解决数独问题sudoku,附python实现 定义 数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复 。 数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。 算法思想 启发式搜索算法,针对摒弃法的改进。 先算出所有空格的候选数,然后找到候选数 阅读详情

*PS:卡常什么的最讨厌了

go to the problem

因为题面太长所以并不想粘qwq

第一遍打的暴搜,codevs 上90,洛谷75,感觉自己萌萌的。

结果打完启发函数后,codevs上A了,洛谷上一直T掉一个点QAQ,优化了一晚上,还是T掉(而且这个点暴搜没T),最后放弃了… T _ T

方法就是每次都从可能性最小的点开始搜,记一下每行每列每宫里已经填了的数的种类,从种类最多的开始搜(也可以加上已经填了的数量)。同时记得打表(分数,宫也可以)。

当然你也可以考虑每次从0最少的地方开始搜,或者进行最优化剪枝(当前还没填的数的个数*90+当前得分<=ans return)、或者用inline、register或O2优化、加上位运算或手读、从9到1倒着枚举、能用char的用char…

暴搜

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;

int cnt,ans=-1,Sum;
int a[10][10],hang[10][10],lie[10][10],gong[10][10][10];
int ch[10],cl[10],cg[10][10];
struct maple{
    int x,y,h;
}point[100];
int score[10][10]={{0,0,0,0,0,0,0,0,0,0},
                   {0,6,6,6,6,6,6,6,6,6},
                   {0,6,7,7,7,7,7,7,7,6},
                   {0,6,7,8,8,8,8,8,7,6},
                   {0,6,7,8,9,9,9,8,7,6},
                   {0,6,7,8,9,10,9,8,7,6},
                   {0,6,7,8,9,9,9,8,7,6},
                   {0,6,7,8,8,8,8,8,7,6},
                   {0,6,7,7,7,7,7,7,7,6},
                   {0,6,6,6,6,6,6,6,6,6}};                  

bool cmp(maple a,maple b)
{
    return a.h>b.h;
}
void Done_used(int i,int j,int k,int d,int d2)
{
    hang[i][k]=lie[j][k]=gong[(i-1)/3][(j-1)/3][k]=d;
}
void Dfs(int k,int sum)  //填到第k个数,总值为sum  
{
    if(k==cnt)
    {
        ans=max(ans,sum);
        return ;    
    }
    int x=point[k+1].x,y=point[k+1].y;
    for(int i=1;i<=9;++i)
       if(!hang[x][i]&&!lie[y][i]&&!gong[(x-1)/3][(y-1)/3][i])
       {
              Done_used(x,y,i,1,1);
              Dfs(k+1,sum+i*score[x][y]);
              Done_used(x,y,i,0,-1);
       }
}
int main()
{

    for(int i=1;i<=9;++i)
       for(int j=1;j<=9;++j)
       {
           scanf("%d",&a[i][j]);
           Done_used(i,j,a[i][j],1,1); 
           Sum+=a[i][j]*score[i][j];
       }
    for(int i=1;i<=9;++i)
       for(int j=1;j<=9;++j)
          if(!a[i][j])
                point[++cnt]=(maple){i,j,0};
    Dfs(0,Sum); 
    printf("%d",ans);
    return 0;
}

codevs AC

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;

int cnt,ans=-1,Sum;
int a[10][10],hang[10][10],lie[10][10],gong[10][10][10];
struct maple{
    int x,y;
}point[100];
int score[10][10]={{0,0,0,0,0,0,0,0,0,0},
                   {0,6,6,6,6,6,6,6,6,6},
                   {0,6,7,7,7,7,7,7,7,6},
                   {0,6,7,8,8,8,8,8,7,6},
                   {0,6,7,8,9,9,9,8,7,6},
                   {0,6,7,8,9,10,9,8,7,6},
                   {0,6,7,8,9,9,9,8,7,6},
                   {0,6,7,8,8,8,8,8,7,6},
                   {0,6,7,7,7,7,7,7,7,6},
                   {0,6,6,6,6,6,6,6,6,6}}; 

void Done_used(int i,int j,int k,int d,int l,int r)
{
    hang[i][k]=lie[j][k]=gong[l][r][k]=d;
}
int Done_data()
{
    int sum=0,pos;
    for(int i=1;i<=cnt;++i)
       if(!a[point[i].x][point[i].y])
       {
           int k=0,l=(point[i].x-1)/3,r=(point[i].y-1)/3;
           for(int j=1;j<=9;++j)
              if(hang[point[i].x][j]||lie[point[i].y][j]||gong[l][r][j])
                  ++k;
           if(k>sum)
           {
               sum=k;
               pos=i;
           }
       }
    return pos;
}
void Dfs(int k,int sum)  // 填到第k个数,总值为sum  
{
    if(k==cnt)
    {
        ans=max(ans,sum);
        return ;    
    }
    if(sum+(cnt-k)*90<=ans) return;
    int j=Done_data();
    int x=point[j].x,y=point[j].y;
    int l=(x-1)/3,r=(y-1)/3;
    for(int i=1;i<=9;++i)
       if(!hang[x][i]&&!lie[y][i]&&!gong[l][r][i])
       {
           a[x][y]=i;
           Done_used(x,y,i,1,l,r);
           Dfs(k+1,sum+i*score[x][y]);
           Done_used(x,y,i,0,l,r);
           a[x][y]=0;
       }
}
int main()
{

    for(int i=1;i<=9;++i)
       for(int j=1;j<=9;++j)
       {
           scanf("%d",&a[i][j]);
           Sum+=a[i][j]*score[i][j];
           if(!a[i][j])  point[++cnt]=(maple){i,j};
           else  Done_used(i,j,a[i][j],1,(i-1)/3,(j-1)/3); 
       }
    Dfs(0,Sum); 
    printf("%d",ans);
    return 0;
}
【Codevs1174】 靶形数独 启发式搜索 (10/1000) Description小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格 高的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一 阅读详情

相关推荐

codevs1174 靶形数独 dfs+剪枝

题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格 高的小九宫格(用粗黑色线隔开的)

. 5万+

CodeVS 2924 数独挑战 题解

#include #include using namespace std; int board[9+2][9+2]; bool Const[9+2][9+2]; bool row[9+2][9+2], col[9+2][9+2], pal[9+2][9+2]; int PAL[9+2][9+2]={ {1, 1, 1, 2, 2, 2, 3, 3, 3}, {1, 1,

AnHongjun的博客 515

sudoku:生成数独,求解算法和穷举搜索的启发式算法

数独 生成数独,用于求解算法和穷举搜索的启发式算法。 该应用程序允许您在数独集合上测试算法的运行时间。 演示 实现的算法 生成数独 this . generate = function ( cellEmptyInput ) { this . refreshSudoku ( ) ; for ( var i = 0 ; i < this . getRandomInt ( 1 , 9 ) ; i ++ ) { this . transposeRowBig ( this . getRandomInt ( 0 , 2 ) , this . getRandomInt ( 0 , 2 ) ) ; } for ( var i = 0 ; i < this . getRandomInt ( 1 , 9 ) ; i ++ ) { this

最优化理论算法:用启发式搜索求解数独问题Matlab实现

用启发式搜索求解数独问题,Matlab实现

qq_45785479的博客 501

数独的最优算法 Dance Linking

这是用 Dance Linking 做的一个数独的实现 速度很快

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu

qq_29523119的博客 2725

code1174 靶形数独

主要是优化搜索顺序 从选择较少的点开始,可以大大提高效率 在search(x,y)找点的时候,对于一个空点(x y),设置一个评分score: score=min{ 横线x上能填的数字个数,竖线y上...个数,所在大方块中...个数} 选取score最小的点搜索 代码: #include<iostream> #include<cstring&g...

dingcao9109的博客 318

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 628

靶形数独 (codevs 1174)题解

【问题描述】 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格高的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一些数字...

358

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 357

告别底噪与失真:手把手教你调校WM8988音频Codec的输入输出增益链

本文详细介绍了如何调校WM8988音频Codec的输入输出增益链,解决底噪与失真问题。从模拟输入增益、数字转换增益到输出放大增益,提供了具体的寄存器配置和调试策略,帮助开发者优化音频信号处理链,提升音质表现。

weixin_30485379的博客 362

codevs 1174 靶形数独

去题面的传送门 QAQ这道题已经调了很久了,一直是TLE 第一次交,codevs 35分,洛谷 70分(好吧看到这样子我还以为洛谷的数据水来着) 后来加了一个优化,codevs 95分,洛谷 80分(这才知道其实是codevs数据水) 优化是这样的: 一开始读入之后,把所有没有填的空位,它的所在行、列、九宫格里的已经填了的数字统计一下,放到结构体里,然后按照数字数量由大到小排序(所在区域已

Loi_LXTT 488

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 342

codevs 数独系列 题解报告

4966 简单数独 4491 验证数独 2207 验证数独 2924 数独挑战 1174 靶形数独一共5道题目,全都和数独有关:4966 简单数独 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某一天,小强忽然迷上了数独,他想从最简单的数独做起,即4*4的数独,然而他仍然做不出来,所以想请你帮帮他。4*4即

xu326057825的博客 1300

Vofa+使用笔记(1):用Vofa+通过串口连接显示波形

1. 介绍 Vofa+有三种协议设置 rawdata:你发什么就显示什么,跟普通的串口助手一样 firewater:最简单在VOFA+里绘制波形的协议,建议仅在通道数量不多、发送频率不高的时候使用。 justfloat:有一定的数据格式,此协议非常适合用在通道数量多、发送频率高的时候。 2. 使用步骤 设置号下面三个地方,使用的协议以及传输的方式 拉出控件 (最开始上位机没有识别到你的数据的时候,右边是没有数据显示的,如果你想要y轴显示什么数据,右边设置显示也可以,右键波形图然后Y轴设置也行) 把进

苏释州的博客 5万+

星空组网 vs 蒲公英 vs Tailscale:2024年国内免费异地组网工具横评(含实测数据)

本文对2024年国内主流免费异地组网工具星空组网、蒲公英和Tailscale进行了深度横向评测。基于实测数据,重点分析了三者在P2P成功率、中继延迟、传输速度及稳定性方面的表现,为中小企业、远程办公及个人开发者提供了清晰的选择指南。星空组网在国内网络环境下展现出优秀的平衡性。

weixin_29217235的博客 1439

【codevs1174】 靶形数独,暴力解决问题

1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z 博士拿出了他最近发明的“靶形

xiaoyimi的博客 965

后仿真中的必懂VCS仿真选项之initreg和deposit

后仿真中,我们常常对于没有复位寄存器和存储器单元,使用仿真选项之initreg和deposit,两种处理方式。今天做总结。请注意:请勿将两者进行同时使用。对于到底选取哪种方式,要结合实际的情况决断。但是,两者同时使用,会有冲突,得不到预期结果。

那么菜的博客 4331

codevs1174 靶形数独(DLX)

题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格 高的小九宫格(用粗黑色线隔开的)

从零开始ACM 789

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CODEVS 1174 靶形数独

题目描述 Description小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格 高的小九宫格(用粗黑色线隔开的)。在这个大

ypxrain的博客 273

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

codevs1174 靶形数独

题目描述Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格高的小九宫格(用粗黑色线隔开的)。在这个大九...

weixin_30454481的博客 112

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【CodeVS】p1174 靶形数独

题目描述Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格高的小...

weixin_30788731的博客 134

靶形数独(codevs 1174)

1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独...

weixin_30781107的博客 87

【NOIP2009】【codevs1174】靶形数独

problem solution codes //(如果你玩数独会怎么填呢)......启发式:把能确定的填上 #include&lt;iostream&gt; using namespace std; const int score[10][10]={ {0,0,0,0,0,0,0,0,0,0}, {0,6,6,6,6,6,6,6,6,6}, {0,6,7...

小哈里的博客 735
上一篇: codevs 2218 补丁 vs 错误 (最短路)
下一篇: <队内胡策> 2017.10.24 求逆序对+表达式计算+贪心+Bfs+最短路、exgcd
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值