c_cpp在n×n的格的棋盘上放置彼此不受攻击的Ñ个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n的格的棋盘上放(

author author     2023-01-09     713

关键词:

//n后问题 回溯法计算 递归
#include "stdafx.h"
#include <iostream>
#include "math.h"
using namespace std; 
 
class Queen

   friend int nQueen(int);
   private:
      bool Place(int k);
	  void Backtrack(int t);
      int  n,    // 皇后个数
          *x;    // 当前解
      long sum;  // 当前已找到的可行方案数  
; 
 
int main()

	int n=4,m;
	cout<<n<<"皇后问题的解为:"<<endl;
	m=nQueen(n);
    cout<<n<<"皇后问题共有";
	cout<<m<<"个不同的解!"<<endl;
	return 0;

 
bool Queen::Place(int k)

	for (int j=1;j<k;j++)
	
		if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) 
		
			return false;
		
	
	return true;
 
 
void Queen::Backtrack(int t)//t扩展的是行

	if (t>n)
	
		sum++;
		for (int i=1;i<=n;i++)
		
		    cout<<x[i]<<" ";
		
		cout<<endl;
	
	else
	
		//探索第t行的每一列是否有元素满足要求
		for (int i=1;i<=n;i++)
		
			x[t]=i;
			if (Place(t))
			
				Backtrack(t+1);
			
		
	
 
 
int nQueen(int n)

	Queen X;
	X.n=n;
	X.sum=0;
 
	int *p=new int[n+1];
 
	for(int i=0;i<=n;i++)
	
		p[i]=0;
	
 
	X.x=p;
	X.Backtrack(1);
 
	delete []p;
	return X.sum;

//n后问题 回溯法计算 迭代
#include "stdafx.h"
#include <iostream>
#include "math.h"
using namespace std; 
 
class Queen

   friend int nQueen(int);
   private:
      bool Place(int k);
	  void Backtrack(void);
      int  n,    // 皇后个数
          *x;    // 当前解
      long sum;  // 当前已找到的可行方案数  
; 
 
int main()

	int n=4,m;
	cout<<n<<"皇后问题的解为:"<<endl;
	m=nQueen(n);
    cout<<n<<"皇后问题共有";
	cout<<m<<"个不同的解!"<<endl;
	return 0;

 
bool Queen::Place(int k)

	for (int j=1;j<k;j++)
	
		if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) 
		
			return false;
		
	
	return true;
 
 
void Queen::Backtrack()

	x[1] = 0;
	int k = 1;
	while(k>0)
	
		x[k] += 1;
		while((x[k]<=n)&&!(Place(k)))//寻找能够放置皇后的位置
		
			x[k] += 1;
		
 
		if(x[k]<=n)//找到位置
		
			if(k == n)
			
				for (int i=1;i<=n;i++)
				
					cout<<x[i]<<" ";
				
				cout<<endl;
				sum++;
			
			else
			
				k++;
				x[k]=0;
			
		
		else
		
			k--;
		
	
 
 
int nQueen(int n)

	Queen X;
	X.n=n;
	X.sum=0;
 
	int *p=new int[n+1];
 
	for(int i=0;i<=n;i++)
	
		p[i]=0;
	
 
	X.x=p;
	X.Backtrack();
 
	delete []p;
	return X.sum;

n皇后问题

...bsp;查看运行结果  题目描述 Description在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置 查看详情

codevs1295n皇后问题

...黄金Gold题解   题目描述 Description在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后... 查看详情

棋盘问题

...这里说一下,已做纪念。我开始想的是,当每一行都有空格的时候, 查看详情

同行列对角线的格

同行列对角线的格链接:【题目描述】输入三个自然数N,i,j(1<=i<=n,1<=j<=n),输出在一个N*N格的棋盘中(行列均从1开始编号),与格子(i,j)同行、同列、同一对角线的所有格子的位置。如:n=4,i=2,j=3表示了棋盘中的... 查看详情

n皇后问题(递归回溯)

...天讲了N后问题,现在来复习一下。  N后问题就是在N*N格的棋盘上面放置彼此不受攻击的n个皇后。这里的皇后指的是国际象棋中的皇后,按照国际象棋的规则,皇后可以攻击当前行和当前列还有同一斜线的棋子。简单来说,就... 查看详情

网络流24题骑士共存

Description在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士,使得... 查看详情

网络流24题骑士共存

Description在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士,使得... 查看详情

骑士共存问题(代码片段)

...u.org/problemnew/show/P3355题目描述在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置... 查看详情

n皇后问题

几句废话:这道题很经典哦!试题描述 在N*N的方格棋盘放置N个皇,使得它们不相互攻击(即任意2个皇后不允许处在同一行,或同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种符... 查看详情

洛谷p3355骑士共存问题

题目描述在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士,使得它... 查看详情

[网络流24题]骑士共存(cogs746)

骑士共存问题?问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。?编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最... 查看详情

网络流24题骑士共存问题(最大流)

...存问题题目描述 Description在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放... 查看详情

hdu-2553:n皇后问题

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。Input共有若干行,每行一... 查看详情

cogs746.[网络流24题]骑士共存

...士共存问题«问题描述:在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入。«编程任务:对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋... 查看详情

p3355骑士共存问题网络流(代码片段)

骑士共存题目描述在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示。棋盘上某些方格设置了障碍,骑士不得进入对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑士... 查看详情

n皇后问题

n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。&n... 查看详情

hdu-2553n皇后问题(代码片段)

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。 Input共有若干行... 查看详情

bzoj4883[lydsy2017年5月月赛]棋盘上的守卫km算法

【BZOJ4883】[Lydsy2017年5月月赛]棋盘上的守卫Description在一个n*m的棋盘上要放置若干个守卫。对于n行来说,每行必须恰好放置一个横向守卫;同理对于m列来说,每列必须恰好放置一个纵向守卫。每个位置放置守卫的代价是不一样的... 查看详情