八皇后问题的全排列解法

来源:互联网 发布:信用评分卡模型python 编辑:程序博客网 时间:2024/05/01 21:32

本文转自微软何海涛的微博。微博网址:http://zhedahht.blog.163.com/  

直接上代码:

#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;int g_number = 0;//全局变量,记录解法的总数void Permutation(int ColumnIndex[], int length, int index);bool Check(int ColumnIndex[], int length);void PrintQueen(int ColumnIndex[], int length);void EightQueen(){const int queens = 8;int ColumnIndex[queens];for (int i = 0; i < queens; i++)ColumnIndex[i] = i;Permutation(ColumnIndex, queens, 0);//全排列}void Permutation(int ColumnIndex[], int length, int index){if (index == length){if (Check(ColumnIndex, length))//检测某一个全排列是否满足条件{++g_number;PrintQueen(ColumnIndex, length);//打印出满足条件的解}}else{for (int i = index; i < length; i++){int temp = ColumnIndex[i];ColumnIndex[i] = ColumnIndex[index];ColumnIndex[index] = temp;Permutation(ColumnIndex, length, index + 1);temp = ColumnIndex[index];ColumnIndex[index] = ColumnIndex[i];ColumnIndex[i] = temp;}}}bool Check(int ColumnIndex[], int length)//检测某一个全排列是否满足条件{for (int i = 0; i < length; i++){for (int j = i + 1; j < length; j++){if (abs(i - j) == abs(ColumnIndex[i] - ColumnIndex[j]))return false;}}return true;}void PrintQueen(int ColumnIndex[], int length)//打印出满足条件的全排列{cout << "Solution " << g_number << endl;for (int i = 0; i < length; i++)cout << ColumnIndex[i] << ' ';cout << endl;}void main(){EightQueen();cin.get();}


0 0
原创粉丝点击