回溯法解决N皇后问题

有两周没写过程序了,找了个简单的练练手。

题目:在N*N的格子上放N个皇后,任意两个皇后不能处于同一横排,同一纵排,也不允许处在同一与棋盘边框成45度角的斜线上。

分析:用N位数表示N皇后问题的解(放进数组g[N]中),第k个数为j,表示第k行第j列放一个皇后。不允许处于同一行或者同一列,则N位数中1--N各出现一次,不能重复。不能处于45度斜线上,则 | g[j] - g[k] | !=j - k 。

国际惯例,代码:

#include "stdafx.h"
#include 
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int i,g,k,j,n,x,a[20];
	cout<<"输入皇后个数:";
	cin>>n;
	cout<=1;k--)
		{
			x=a[i]-a[k];
			if (x<0)
			{
				x=-x;
			}
			if (x==0||x==i-k)//相列或者处于同一对角线时返回
			{
				g=0;
			}
		}

		if (i==n&&g==1)//满足条件是输出
		{
			for (j=1;j<=n;j++)
			{
				cout<1)//往前回溯
		{
			i--;
		}
		if (a[i]==n&&i==1)//回溯试探结束
		{
			break;
		} 
		else//下一列
		{
			a[i]=a[i]+1;
		}
	}
	cout<<"\n共有"<


 

你可能感兴趣的:(c++学习笔记)