⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8_queens.cpp

📁 八皇后问题:八皇后问题是一个古老而著名的问题
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <time.h>

const int N=8;
int X[N+1];

bool place(int k)
{//如果一个皇后能放在第k行和X(k)列,则返回true,否则返回false。
	//X是一个全程数组,进入此过程时已设置了k个值。
	int i=1;
	while(i<k)
	{
		if(X[i]==X[k] || abs(X[i]-X[k])==abs(i-k))
			return false;
		i=i+1;
	}
	return true;
}

void n_queens(int n)
{
	int k;
	k=1;//k是当前行
    X[1]=0;//X[k]是当前行
    int j=0;//记录解的个数
    cout<<"所有可能的解如下:"<<endl;
	while(k>0)
	{  
		X[k]=X[k]+1;
		while(X[k]<=n && !place(k))
		{
			X[k]=X[k]+1;
		}
		if(X[k]<=n)
			if(k==n)
			{ 
				cout<<"第"<<++j<<"组解:";
				for(int i=1; i<=n; i++)
					cout<<X[i]<<"   ";
				cout<<endl;
			}
			else
			{
				k=k+1;
				X[k]=0;
			}
			else
				k=k-1;
	}
}

int main()
{
    clock_t start, finish; 
	double duration; 
	/* 测量此事件持续的时间*/ 
	time_t t;
	time(&t);
	start = clock();
	
	n_queens(N);
	
    time(&t); 
	
	finish = clock(); 
	duration = (double)(finish - start) / CLOCKS_PER_SEC; 
	cout<<endl;
	cout<<"用时"<<duration<<"秒"<<endl;
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -