回溯算法--n皇后问题

假期 2020.01.21

题目描述

分析见本博主博文图解八皇后问题(递归),此处只提供另一种写法。


代码解析

#include
#include
using namespace std;
const int Max_size = 100;
int row_total,line_total;//行,列总数
int line_choiced[Max_size];//已经选列
int map[Max_size][Max_size];//邻接矩阵
int sum_choiced = 0;//方案个数
int Place_suit(int i);//检查是否合理的函数
void Re_search(int i);
int main()
{
	int i, j;
	cout << "请输入n*n矩阵行数n或列数n:";
	cin >> row_total;
	line_total = row_total;
	memset(map, 0, sizeof(map));
	Re_search(1);
	cout << "总方案个数:" << sum_choiced << endl;
	return 0;
}
void Re_search(int i)
{
	if (i > line_total){//全部节点已经计算完时
		sum_choiced++;
		cout << "第" << sum_choiced << "种方案:" << endl;
		for (int j = 1; j <= line_total; j++)
			cout << line_choiced[j] << " ";
		cout << endl;
		return;
	}
	else {
		for (int j = 1; j <= line_total; j++)
		{
			line_choiced[i] = j;
			if (Place_suit(i))//该位置可以放置该点
				Re_search(i + 1);
		}
	}
	return;
}
int Place_suit(int i)//检查是否合理的位置
{
	for (int j = 1; j <= i - 1; j++){
		if ( line_choiced[i] - line_choiced[j] == 0 || abs(line_choiced[j] - line_choiced[i]) == i - j)
			return 0;
	}
	return 1;
}


运行结果

8皇后问题
回溯算法--n皇后问题_第1张图片
10皇后问题
回溯算法--n皇后问题_第2张图片

你可能感兴趣的:(数据结构,#,算法题,#,exercise,算法,数据结构,回溯算法)