皇后问题
程序代码:
#include<stdio.h> #define MAX 6 int a[MAX]; int fire(int a[],int i) //判断和前买你的皇后有没有冲突 { int n; for(n=0;n<i;n++) if(a[n]==a[i]||abs(a[n]-a[i])/abs(n-i)==1) return 1; return 0; } int main() { int i; int a[MAX]; for(i=0;i<MAX;i++)//初始化在第一格 a[i]=1; for(i=0;i<MAX;)//判断各行的皇后位置 { if(fire(a,i)) { a[i]++;// 有冲突的时候,下一个格 while(a[i]>MAX)// 当这个值大于MAX的时候说明已经超出了棋盘的宽,循环向上选着。 { a[i]=1; a[--i]++;// i--; a[i]++; } } else i++;// 如果这个点的皇后与前面的不冲突,继续选着下一个位置。 } for(i=0;i<MAX;i++,printf("\n"))//输出皇后相对位置 { for(int n=1;n<a[i];n++) printf(" 0 "); printf(" 1 "); for(int n=a[i]+1;n<=MAX;n++) printf(" 0 "); } return 0; }各位大虾千万不要用递归呀,我到现在还不知道递归是怎么算出来的。
这个能算出 MAX =4,5的但算不出6,7,8的了···不知道什么原因。thanks!