回溯算法 八皇后

#include <stdio.h>
#include <stdlib.h>

#define max 8 

int queen[max], sum = 0;  //queen数组内放的是皇后的纵坐标

void show()    //打印输出
{
	int i;
	for(i = 0; i < max; i++)
	{
		printf("(%d,%d)",i,queen[i]);
	}
	printf("\n");
	sum++;
}

int check(int n)   //检查当前列是否可以放置皇后
{
	int i;
	for(i = 0; i < n; i++) //检查横排和对角线是否可以放置皇后
	{
		if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)) // abs函数用来求绝对值
		{
			return 1;
		}
	}
	return 0;
}

void put(int n)
{
	int i;               
	for(i = 0; i < max; i++)
	{
		queen[n] = i;  // 把皇后放置到当前循环位置
		if(!check(n))
		{
			if(n == max - 1)  // 判断是否结束
			{
				show();
			}
			else
			{
				put(n + 1);
			}
		}
	}
}

int main()
{
	put(0);                 //从横坐标0开始排列
	printf("总共有 %d 种八皇后\n",sum);

	system("pause");

	return 0;
}

转载自姜南(slyar)

    原文作者:八皇后问题
    原文地址: https://blog.csdn.net/wyp784035821/article/details/84559439
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞