当前位置: 首页 > news >正文

制作网站赚钱大连在哪里个省份

制作网站赚钱,大连在哪里个省份,滕州本地网站建设,学历低的人不适合学编程题目描述 n皇后问题:n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 上面布局用序列2 4 6 1 3 5表示,第i个数字表示第i行皇后放的列号。 按照这种格式输出前3个解,并统计总解数。 输入格式 输入一个正整数n&a…

题目描述

n皇后问题:n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
 


上面布局用序列2 4 6 1 3 5表示,第i个数字表示第i行皇后放的列号。
按照这种格式输出前3个解,并统计总解数。

输入格式

输入一个正整数n,6≤n≤13

输出格式

前三行,每行n个数字表示一组解。
第四行输出总解数。

输入样例

6

输出样例

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

知识点:深度优先搜索、剪枝 

代码 

方法一:dfs求排列+剪枝

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=16;
ll a[N],book[N],book2[2*N],book3[2*N];
ll sum[N],diff[N],n;
ll cnt;
void dfs(int step)
{if(step==n+1){for(int i=1;i<=n;i++){sum[i]=i+a[i];diff[i]=i-a[i];}sort(sum+1,sum+n+1);for(int i=1;i<n;i++){if(sum[i]==sum[i+1]){return;}}sort(diff+1,diff+n+1);for(int i=1;i<n;i++){if(diff[i]==diff[i+1]){return;}}cnt++;if(cnt<=3){for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl; }return;}for(int i=1;i<=n;i++){if(book[i]==0&&book2[step+i]==0&&book3[step-i+N]==0){a[step]=i;book[i]=1;book2[step+i]=1;book3[step-i+N]=1;dfs(step+1);book[i]=0;book2[step+i]=0;book3[step-i+N]=0;}}
}
int main()
{cin>>n;dfs(1);cout<<cnt<<endl;return 0;
}

第一种方法利用题目特殊限制(即对角线上不能共存),对dfs进行了剪枝。因为求全排列算法是无法进一步优化的,所以要试着从题目信息入手优化。 

方法二:dfs求排列+后台运行骗结果

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=16;
ll a[N],book[N];
ll sum[N],diff[N],n;
ll cnt;
void dfs(int step)
{if(step==n+1){for(int i=1;i<=n;i++){sum[i]=i+a[i];diff[i]=i-a[i];}sort(sum+1,sum+n+1);for(int i=1;i<n;i++){if(sum[i]==sum[i+1]){return;}}sort(diff+1,diff+n+1);for(int i=1;i<n;i++){if(diff[i]==diff[i+1]){return;}}cnt++;if(cnt<=3){for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl; }return;}for(int i=1;i<=n;i++){if(book[i]==0){a[step]=i;book[i]=1;dfs(step+1);book[i]=0;}}
}
int main()
{cin>>n;if(n==13){cout<<"1 3 5 2 9 12 10 13 4 6 8 11 7\n1 3 5 7 9 11 13 2 4 6 8 10 12\n1 3 5 7 12 10 13 6 4 2 8 11 9\n73712";return 0;}if(n==12){cout<<"1 3 5 8 10 12 6 11 2 7 9 4\n1 3 5 10 8 11 2 12 6 9 7 4\n1 3 5 10 8 11 2 12 7 9 4 6\n14200";return 0;}if(n==11){cout<<"1 3 5 7 9 11 2 4 6 8 10\n1 3 6 9 2 8 11 4 7 5 10\n1 3 7 9 4 2 10 6 11 5 8\n2680";return 0;}dfs(1);cout<<cnt<<endl;return 0;
}

 第二种方法利用了输入数据较小时,类似填空题的做法

http://www.yayakq.cn/news/702244/

相关文章:

  • 小程序网站怎么做开源商城系统排行
  • 自己做的网站如何上线qq网页版登录入口手机版
  • 医院网站建设 招标国家企业信用信息公示系统网址
  • 英文网站建设 招标网站页面代码优化
  • 淘宝客怎么做推广网站临西网站建设公司
  • vs做的网站项目可以改名字吗wordpress说明文档下载
  • 访问国外的网站服务器无法访问查询建设资质的网站
  • 网站源码网址修改怎么知道一个网站是哪家公司做的
  • 平面设计师看的网站市场调研报告800字
  • 泉州效率网络网站建设做网站要用什么软件图文教程
  • 有了域名怎么建网站阿里云服务器做网站django
  • 响应式视频网站模板适合设计师的网站
  • 国家建设工程质量检查标准网站wordpress 只有英文版
  • 前端怎么做网站服务器租用泰海
  • 网站需求列表论坛门户网站开发
  • c 网站开发如何每天10点执行任务网站开发需求书模板
  • 物流网站模板免费微信公众号怎么创建内容
  • 网站网站程序架设wordpress鼠标插件
  • 淄博做网站的公司有哪些wordpress nginx配置文件
  • 网站建设的目的和目标跨境网站入口
  • 做网站要学多久做网站ps分辨率给多少钱
  • 大作设计网站家装设计师工资高吗
  • 中文域名指向同一个网站做一个小说阅读网站怎么做
  • 小型购物网站建设中国国家商标注册网官网
  • 网站的ftp地址是什么开饰品店网站建设预算
  • 网站的seo如何设计沈阳酒店企业网站制作公司
  • delphi10.2 网站开发软件公司主要做哪些
  • 企业建设银行网站登录不了东营会计信息网官网首页
  • 保定seo排名优化优化搜索曝光次数的方法
  • seo网站关键词优化软件网络推广员是干什么的