代码如下
验证正确 92总排列方式
#include"stdio.h"
#include"stdlib.h"
#define N 8 //N代表为8皇后
int H[N];//记录皇后的位置
void huanghou();
int OK(int i, int j);//判断是否冲突
int main(void)
{
huanghou();
system("pause");
return 0;
}
void huanghou()
{
int i = 1, sum = 0, j;
H[i] = 0;
while(i > 0)
{
H[i]++;
while(H[i] <= N && !OK(i,H[i]))
{
H[i]++;
}
// printf("%d, %d\n",i, H[i]);
// system("pause");
if(H[i] <= N)
{
if( i == N)
{
sum++;
printf("第%d解\n",sum);
printf("皇后的排列顺序为");
for(j = 1; j <= N; j++)
{
printf("%4d",H[j]);
}
printf("\n");
}
else
{
i++;
H[i] = 0;
}
}
else
{
i--;
}
}
}
int OK(int i, int j)//看第i行的j列是否可以插入
{
int k;
for (k = 1; k < i; k++)
{
if((H[k] == j) || (k - H[k] == i - j) || ( k + H[k] == i + j))
{
return 0;
}
}
return 1;
}
比较迭代算法也回朔算法的区别
思考中
想好在签上来