容易理解回溯法的内涵:
#include<iostream>
#include<math.h>
using namespace std;
int n=8;
int total=0; //解法个数
int *c=new int(n); //存储当前的col
bool is_ok(int row){
for(int j=0;j!=row;j++){
if(c[row]==c[j] || row-c[row]==j-c[j] || row+c[row]==j+c[j])
return false;
}
return true;
}
void queen(int row){
if(row==n)
total++;
else
for(int col=0;col!=n;col++){
c[row]=col;
if(is_ok(row))
queen(row+1);
}
}
int main(){
queen(0);
cout<<total;
return 1;
}
原文引自: