蓝桥杯2016初赛 - 方格填数 - 暴力/DFS
这个是直接暴力写的,但是我想到暴力,但是看了这个博主写的我觉得我肯定会有细节漏掉
https://blog.csdn.net/u014552756/article/details/50946108?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.channel_param
思路
DFS。答案是1580。
代码
这个链接下的暴力方法不超时。
https://blog.csdn.net/u014552756/article/details/50946108
(我这个代码超时,但是运行出来的答案是正确的,直接答案提交就行)
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int a[5][5]; // 可以填进去数的地方
int num[5][5]; //填上数
int ans; // 几种填法
bool book[25];
int to[8][2]= {{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};
void dfs(int id)
{
int x=id/4,y=id%4;
if(x==3)
{
bool flag=0;
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
if(a[i][j]==0) // 判断四周有没有方格
continue;
for(int k=0; k<8; k++) // 八方向
{
// int tx=x+to[k][0];
// int ty=y+to[k][1];
int tx=i+to[k][0];
int ty=j+to[k][1];
if(tx>=0&&tx<3&&ty>=0&&ty<4&&a[tx][ty])
{
if(abs(num[tx][ty]-num[i][j])==1)
flag=1;
}
}
}
}
if(!flag) ans++;
return ;
}
if(!a[x][y])
dfs(id+1);
else
{
for(int i=0; i<=9; i++) // 遍历九个数字
{
if(!book[i])
{
book[i]=1;
num[x][y]=i;
dfs(id+1);
book[i]=0;
}
}
}
}
int main()
{
// cout<<1580<<endl; 数字不重复
ios::sync_with_stdio(false);
ans=0;
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
a[i][j]=1;
}
a[0][0]=0,a[2][3]=0;
dfs(0);
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」