八皇后算法

本文介绍了一种使用C语言解决八皇后问题的方法。通过递归回溯算法,在8×8的棋盘上寻找皇后放置的所有可能方案,确保任意两个皇后不在同一行、列及对角线上。代码详细展示了如何利用一维数组记录已放置皇后的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我的网摘里已经有一个通过string类型存储来实现的

现在这个是自己通过char型数组来做的,异曲同工,不过相对来说,这个更容易理解


//八皇后问题
#include <stdio.h>
#include <string>
using namespace std;
static char Queue[8][8];
static int a[8];//列
static int b[15];//主对角线
static int c[15];//从对角线
static int iQueueNum = 0;//可行方案数

void qu(int i)
{
	int iColumn;
	for (iColumn = 0;iColumn < 8;iColumn++)
	{
		//满足条件
		if (a[iColumn] == 0 && b[7- iColumn + i] == 0 && c[i + iColumn] == 0)
		{
			Queue[i][iColumn] = 'Q';
			a[iColumn] = 1;
			b[7- iColumn + i] = 1;
			c[i + iColumn] = 1;
			if (i < 7)
			{
				qu(i + 1);
			}
			else
			{
				printf("第%d种:/n", ++iQueueNum);
				for (int i = 0;i<8;i++)
				{
					for (int j = 0;j<8;j++)
					{
						printf("%c ",Queue[i][j]);
					}
					printf("/n");
				}
				printf("/n/n");
			}
			//无论这方案能不能通过,都要回溯恢复
			Queue[i][iColumn] = '-';
			a[iColumn] = 0;
			b[7- iColumn + i] = 0;
			c[i + iColumn] = 0;
		}
	}
}

void main()
{
	for (int i =0;i<8;i++)
	{
		a[i] = 0;
		for (int j = 0;j<8;j++)
			Queue[i][j] = '-';
	}
	for (int i = 0;i < 15;i++)
	{
		b[i] = c[i] = 0;
	}
	qu(0);
	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值