参考:http://www.cnblogs.com/hustcat/archive/2008/04/09/1144645.html
N后问题的描述:在N*N的方格中,放置N个皇后使得彼此不受攻击,即任意两个皇后不能在同一行、同一列或者同一条对角线上。
典型的搜索图:
典型的问题是八皇后问题:
代码:
#include "stdafx.h" #include<iostream> using namespace std; #define N 9 int x[N+1]; //输出结果 void Output() { for(int i=1;i<=N;i++) { cout<<"("<<i<<","<<x[i]<<")"<<endl; } printf("\n"); } //求解函数 void Queen(int i,int n) { if(i>n) Output(); else { for(int j=1;j<=n;++j) { int k=1; x[i]=j; while(k<i) { if((x[k]-x[i])*(abs(x[k]-x[i])-abs(k-i))!=0) { k++; if(k==i) Queen(i+1,n); } else { break; } } } } } int _tmain(int argc, _TCHAR* argv[]) { for(int i=1;i<=N;i++) { x[1]=i; //设置第一行 Queen(2,N); } return 0; }