自己编的八皇后问题仅供参考
程序代码:
#include <stdio.h> #define MAX 8 #define NUM 100000 int arr[MAX][MAX]; int result[NUM][MAX]; int tmp[MAX]; int res; void init() { int i,j; for(i=0;i<MAX;i++) { for(j=0;j<MAX;j++) arr[i][j]=0; tmp[i]=-1; } res=0; } void Attack(int x,int y,int inc) { int i,j; for(i=0;i<MAX;i++) arr[i][y]+=inc; for(i=0;i<MAX;i++) arr[x][i]+=inc; for(i=x,j=y;i<MAX&&j<MAX;i++,j++) arr[i][j]+=inc; for(i=x,j=y;i>=0&&j>=0;i--,j--) arr[i][j]+=inc; for(i=x,j=y;i<MAX&&j>=0;i++,j--) arr[i][j]+=inc; for(i=x,j=y;i>=0&&j<MAX;i--,j++) arr[i][j]+=inc; arr[x][y]-=5*inc; } void Queen(int layer) { int i; if(layer==MAX) { for(i=0;i<MAX;i++) { result[res][i]=tmp[i]; } res++; return; } for(i=0;i<MAX;i++) { if(arr[layer][i]) continue; Attack(layer,i,1); tmp[layer]=i; Queen(layer+1); Attack(layer,i,-1); tmp[layer]=-1; } } int main() { int i,j; init(); Queen(0); for(i=0;i<res;i++) { for(j=0;j<MAX;j++) printf("%d ",result[i][j]); printf("\n"); } printf("%d\n",res); return 0; }
[ 本帖最后由 C_戴忠意 于 2012-4-16 21:06 编辑 ]