#include<stdio.h>
#include<math.h>
int x[50];
int Queen (int n);
int hou(int k);
int main()
{ int n;
printf("请输入皇后的个数:");
scanf("%d",&n);
printf("皇后依次所在列数:\n");
Queen(n);
}
int Queen (int n) //求解n皇后问题
{ int k=0;
while(k>=0) //摆放皇后k,注意0<=k<n
{x[k]++; //在下一列摆放皇后k
while (x[k]<n && hou(k)==1) //发生冲突
x[k]++; //皇后k试探下一列
if(x[k]<n && k==n-1) //得到一个解,输出
{
for (int i=0; i<n; i++)
printf("%d ",x[i]+1); //数组下标从0开始,打印的列号从1开始
return 0;
}
if(x[k]<n && k<n-1) //尚有皇后未摆放
k=k+1; //准备摆放下一个皇后
else
x[k--]=-1; //重置x[k],回溯,重新摆放皇后k
}
printf("无解\n");
}
int hou(int k) //考察皇后k放置在x[k]列是否发生冲突
{ int n;
for (int i=0; i<k; i++)
if (x[i]==x[k]||abs (i-k)==abs(x[i]-x[k])) //违反约束条件
return 1; //冲突,返回1
return 0; //不冲突,返回0
}
怎么使结果是1 3 6 8 10 5 9 2 4 7
if(x[k]<n && k==n-1) //得到一个解,输出
{
for (int i=0; i<n; i++)
printf("%d ",x[i]+1); //数组下标从0开始,打印的列号从1开始
return 0;
}
你找到一个解之后就直接return,不再继续循环不就得了