首页 > 其他分享 >八皇后问题

八皇后问题

时间:2024-02-05 19:12:23浏览次数:21  
标签:k2 int 问题 vis k1 && 皇后

题目描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方


  1. 引入状态数组vis[8][8],vis[i][j]表示(i,j)被多少个皇后攻击
  2. 之所以不用0,1来表示(i,j)是否被攻击,是因为回溯时,拿走一个皇后,也要将它攻击的位置清除,但如果把他攻击的位置变成0,那别的皇后对这个位置的攻击可能也会失效
  3. 输出二维数组时,输出a[i][j]应改成a[j][i]

对于第3条,可以试一下

  


#include<bits/stdc++.h>
using namespace std;
int n=8;
int vis[8][8];
int a[8][8];
int ans=0;
void setVis(int i,int j,int f){
	a[i][j]=(f==1);
	vis[i][j]+=f;
	for(int k=0;k<n;k++){
		if(k!=j) vis[i][k]+=f;
	}
	for(int k=0;k<n;k++){
		if(k!=i) vis[k][j]+=f;
	}
	
	for(int k1=i,k2=j;k1<n && k2>=0; k1++,k2--){
		if(k1!=i && k2!=j) vis[k1][k2]+=f;
	}
	for(int k1=i,k2=j;k1>=0 && k2<n; k1--,k2++){
		if(k1!=i && k2!=j) vis[k1][k2]+=f;
	}
	
	for(int k1=i,k2=j;k1>=0 && k2>=0; k1--,k2--){
		if(k1!=i && k2!=j) vis[k1][k2]+=f;
	}
	for(int k1=i,k2=j;k1<n && k2<n; k1++,k2++){
		if(k1!=i && k2!=j) vis[k1][k2]+=f;
	}
}
void dfs(int i) {
    if(i==n) {
        cout<<"No. "<<++ans<<endl;
        for(int j=0; j<n; j++) {
            for(int k=0; k<n; k++) {
				cout<<a[k][j]<<" ";
            }
            cout<<endl;
        }
        return;
    }
    for(int j=0;j<n;j++){
    	if(!vis[i][j]){
    		setVis(i,j,1);
    		dfs(i+1);
    		setVis(i,j,-1);
		}
	}
}
int main() {
    dfs(0);
    return 0;
}

 

标签:k2,int,问题,vis,k1,&&,皇后
From: https://www.cnblogs.com/algorithm-hu/p/18008603

相关文章

  • 中文数字的应用及其问题解决之道
    中文数字,也称汉字数字,是中文语言中表示数字的一种方式。它们不仅有着悠久的历史和文化背景,还在日常生活中发挥着重要的作用。本文将探讨中文数字的应用领域,并介绍它们如何解决实际问题。中文数字-阿拉伯数字转换|一个覆盖广泛主题工具的高效在线平台(amd794.com)https:/......
  • 问题合集
    1.一万行的csv文件,需要获取到指定列的值,怎么读取效率更快?答:其实这是一个失误,我一直以为是read_csv方法本来就很慢,其实是我本人失误,我导入了另一个文件的操作,很耗时,但是实际运行文件又没用到,程序执行的时候,先去执行了另一个文件,出现的结果就是运行时间很慢很慢解:只需要读取出指定文......
  • Python在处理飞书下载二进制文件时转换的问题
    最近在使用飞书,想通过接口来下载飞书文档https://open.feishu.cn/api-explorer/cli_a5049e070838d00c?apiName=download发现无法将二进制流转换为文件后来发现其文档有一些谬误,文档上写的是response.text实际写入二进制文件需要的是response.content#发起下载请求,拿到文......
  • 关于easyExcel解析未添加@ExcelProperty报错问题分析
    在一次做辅料商品导出列表的需求,并且上线之后发现,怎么商品列表的导出没有反应,一看日志,发现报错了:这里新加了两个字段用于做转换使用。因为之前很少用easyExcel,所以以为只要不加@ExcelProperty,easyExcel就不会去解析字段,没想到easyExcel还是去做了解析。源码分析通过上面的......
  • .NET 7 MAUI 使用基于 REST 的 Web 服务过程中本地开发的问题
    .NET7MAUI使用基于REST的Web服务过程中本地开发的问题微软文档:https://learn.microsoft.com/zh-cn/dotnet/maui/data-cloud/rest?view=net-maui-7.0错误代码Java.Security.Cert.CertificateException:'TheremotecertificatewasrejectedbytheprovidedRemoteCert......
  • hdu 2553 N皇后问题(DFS模板)
    Problem-2553(hdu.edu.cn)#include<iostream>#include<cstring>usingnamespacestd;intn,tot=0;intcol[12];boolcheck(intc,intr){for(inti=0;i<r;i++){if(col[i]==c||(abs(col[i]-c)==abs(i-r)))returnfalse;}r......
  • 安卓服务的常见问题,性能优化以及应用场景剖析
    一、引言在安卓开发中,服务(Service)扮演着至关重要的角色,它们在没有用户界面的情况下,为用户提供了长时间的后台任务执行能力。本文将探讨服务常见问题、优化策略、应用场景以及开发过程中应注意的事项。二、应用场景服务作为安卓应用程序的重要组成部分,主要用于在后台执行持续性的、......
  • 最短路径问题
    一、Bellman-Ford算法Q:有一张有\(n\)个点、\(m\)条边的有向图,可能存在重边、负边和自环,但不存在负环,求起点\(s\)到每个点的最短路径。1.1算法简析记图为\(G\);\(G[u]\)表示以\(u\)为起点的所有边的集合;\(e(u,v)\)表示\(u\)到\(v\)的某一条有向边(\(e(u,v)\inG[......
  • RMQ问题
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongchar*p1,*p2,buf[100000];#definenc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)intread(){intx=0,f=1;charch=nc();while(ch<48......
  • 01背包问题
    题目描述有\(n\)个重量和价值分别为\(w_i\),\(v_i\)的物品。从这些物品中挑选出总重量不超过\(W\)的物品,求所有挑选方案中价值总和的最大值。数据范围:\(1\len\le100\)\(1\lew_i,v_i\le100\)\(1\leW\le10000\)记忆化搜索暴力搜索递归方程:令\(dfs(i,j)=\)从编号......