寒假Day58:蓝桥杯-2n皇后问题-八皇后变形
题目链接:
http://oj.ecustacm.cn/problem.php?id=1404
思路:
经典八皇后变形问题
标记行、判断列和两条对角线即可
先下黑皇后,下完后再去下白皇后
注意:这一题是1可以放,0不可以放
判断方式:
int check(int *queen,int x)//判断列和两条对角线 { for(int i=1; i<x; i++) { int w=queen[i]-queen[x]; if(w==0||w==i-x||w==x-i) return 0; } return 1; }
如何下黑皇后:
int black(int x) { if(x==n+1) white(1); else { for(int i=1; i<=n; i++) { if(a[x][i]==1) { hei[x]=i; if(check(hei,x)) black(x+1);//递归下一行 } } } }
下白皇后的时候需要注意下不要和黑皇后重复了:
if(a[x][i]==1&&i!=hei[x])
AC代码:

1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 int a[10][10],hei[10],bai[10],ans,n; 6 7 int check(int *queen,int x)//判断列和两条对角线 8 { 9 for(int i=1; i<x; i++) 10 { 11 int w=queen[i]-queen[x]; 12 if(w==0||w==i-x||w==x-i) 13 return 0; 14 } 15 return 1; 16 } 17 18 void white(int x) 19 { 20 if(x==n+1) 21 { 22 ans++; 23 return; 24 } 25 for(int i=1; i<=n; i++) 26 { 27 if(a[x][i]==1&&i!=hei[x]) 28 { 29 bai[x]=i;//在(x,i)放白皇后 30 if(check(bai,x)) 31 white(x+1); 32 } 33 } 34 } 35 36 int black(int x) 37 { 38 if(x==n+1) 39 white(1); 40 else 41 { 42 for(int i=1; i<=n; i++) 43 { 44 if(a[x][i]==1) 45 { 46 hei[x]=i; 47 if(check(hei,x)) 48 black(x+1);//递归下一行 49 } 50 } 51 } 52 } 53 54 int main() 55 { 56 cin>>n; 57 ans=0; 58 for(int i=1; i<=n; i++) 59 { 60 for(int j=1; j<=n; j++) 61 cin>>a[i][j]; 62 } 63 black(1);//第一行 64 cout<<ans<<endl; 65 return 0; 66 }
分类:
蓝桥杯
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」