n皇后输出问题

mac2026-02-05  0

子集数框架

#include <stdio.h> #include <math.h> static int table[9][9]={0}; class Queen { friend int nQueen(int); private: bool Place(int k); void Backtrack(int t); int n,*x; long sum; };

bool Queen::Place(int k) { for (int j=1;j<k; j++) if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) {

return false; } return true;

}

void Queen::Backtrack(int t) { if (t>n) {

sum++; printf("%d\n",sum); for(int i=1;i<9;i++) { for(int j=1;j<9;j++) printf("%2d",table[i][j]); putchar('\n'); } putchar('\n'); for(int i=2;i<9;i++) for(int j=1;j<9;j++) table[i][j]=0; } else { for (int i=1; i<=n; i++) { x[t]=i; if (Place(t)) { table[t][i]=1; Backtrack(t+1); } table[t][i]=0; } }

}

int nQueen(int n) { Queen X; X.n=n; X.sum=0; int *p=new int[n+1]; for (int i=0;i<=n; i++) p[i]=0; X.x=p; X.Backtrack(1);

delete[] p; return X.sum;

}

int main() { int x,y; x=8; y=nQueen(x); printf(“sum=%d\n”,y); return 0; }

最新回复(0)