求教八皇后问题
怎样把8个棋子既不同在一列,有不同在一行,并且到达棋盘上的每个位置
百度搜索一下吧。。。
http://zhidao.baidu.com/question/17090864.html?fr=qrl
#include <stdio.h> int Map[8][8]={0},Horiz[8],p[15],q[15],m=0; void Output(int*pm) { int i,j; (*pm)++; printf("No.%d\n",*pm); for(i=0;i<8;i++) { for(j=0;j<8;j++) if(Map[i][j]) printf("* "); else printf("_ "); printf("\n"); } printf("******************************************\n"); } void SolveEightQueens(int n) { int i; if(n==8) Output(&m); for(i=0;i<8;i++) if(Horiz[i]&&p[n+i]&&q[n-i+7]) { Map[n][i]=1; Horiz[i]=0; p[n+i]=0; q[n-i+7]=0; SolveEightQueens(n+1); Map[n][i]=0; Horiz[i]=1; p[n+i]=1; q[n-i+7]=1; } } void main() { for(int i=0;i<8;i++) Horiz[i]=1; for(i=0;i<15;i++) { p[i]=1; q[i]=1; } SolveEightQueens(0); }
#include<stdio.h> int c[9][9]={0}; int n=8,x[20]; int ok(int k) { int i,t=1; for(i=1;i<k;i++) t=t&&x[i]!=x[k]&&x[i]-x[k]!=i-k&&x[i]-x[k]!=k-i; return t; } int f(int k) { int v=0,i,j; if(k>n) { v=1; for(i=1;i<=n;i++)printf("%d ",x[i]); printf("\n"); } else for(j=1 ; j<=n ; j++) { x[k]=j; if(ok(k))v+=f(k+1); } return v; } int main() { int v; v=f(1); printf("\nv=%d\n",v); return 0; }