[蓝桥杯2016初赛]方格填数
正如题目,我们要保证相邻的数不相连就行了,一共要填十个数。
下面是我的思路,供大家参考一下,
我把上面的各子放进了这个5*6的矩形,其中标记1–10的分别是要填数的各格子,一开始我先初始化这个二维数组为全部是0,然后从2~11开始填数,这里是一个关建,可以避免0和1是连续的数,减少不必要的判断,
从第一个数开始搜索标记为第一个数,
接下来的x坐标就是1+pos/4
y坐标就是pos-pos/4*4+1;
#include<iostream>
#include<cstring>
#include<cmath>
int ans[10][10];
int each[12],sum;
using namespace std;
bool judge(int x,int y,int now) {
for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
if(abs(ans[x+i][y+j]-now)==1)
return false;
return true;
}
void dfs(int pos) {
if(pos==11) {
sum++;
return ;
}
for(int i=2;i<=11;i++) {
if(!each[i]) {
int x=1+pos/4;
int y=pos-pos/4*4+1;
if(judge(x,y,i)) {
each[i]=1;
ans[x][y]=i;
dfs(pos+1);
ans[x][y]=0;
each[i]=0;
}
}
}
}
int main()
{
sum=0;
memset(ans,0,sizeof(ans));
memset(each,0,sizeof(each));
dfs(1);
cout<<sum<<endl;
return 0;
}
最后答案应该是1580。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!