题解
2024-05-21 13:23:21
发布于:广东
66阅读
0回复
0点赞
广搜
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct node{
int a[15] = {0}, ct = 0;
bool vis[15] = {0};
};int n = 8;
bool check(node n){
for(int i = 1; i < n.ct; i++){
if(n.a[i] + i == n.a[n.ct] + n.ct || n.a[i] - i == n.a[n.ct] - n.ct) return 0;//如果在对角线就不行
}return 1;
}
int bfs(int n){
int ct = 0;
node xxx;
queue <node> q;
q.push(xxx);
while(!q.empty()){
node head = q.front();
q.pop();
if(head.ct == n){
ct++;
if(ct <= 3){
for(int i = 1; i <= n; i++) cout << head.a[i] << ' ';//输出
cout << endl;
}
continue;
}for(int i = 1; i <= n; i++){
if(!head.vis[i]){
node xx = head;
xx.a[++xx.ct] = i;
if(check(xx)){
xx.vis[i] = 1;
q.push(xx);
}
}
}
}return ct;
}
int main(){
cin >> n;
cout << bfs(n);
return 0;
}
全部评论 1
hello,排位赛#8的获奖通知已发送短信啦,记得查看短信对应链接,填写信息领取奖品哦!
2024-05-21 来自 浙江
0服了,当成垃圾短信过滤了,现在才看到
2024-05-22 来自 广东
0好的,已经安排寄送了
2024-05-22 来自 浙江
0
有帮助,赞一个