queens8.c

来自「scheme实现的八皇后问题」· C语言 代码 · 共 66 行

C
66
字号
/*递归实现*/
#include <stdio.h>
static char queen[8][8];
static int a[8];
static int b[15];//主对角线
static int c[15];//从对角线
static int iQueenNum=0;
void qu(int i);//i代表行
int main()
{
	int iLine,iColumn;
		int l=0,cc=0;
	//棋盘初始化
	for(iLine=0;iLine<8;iLine++)
	{
		a[iLine]=0;//列标记初始化,表示无列冲突
		for(iColumn=0;iColumn<8;iColumn++)
		{
			queen[iLine][iColumn]='*';
		}
	}
	for(iLine=0;iLine<15;iLine++)
	{
		b[iLine]=0;
		c[iLine]=0;
	}

	qu(0);

	return 0;
}

void qu(int i)
{
	int iColumn;
	for(iColumn=0;iColumn<8;iColumn++)
	{
		if(a[iColumn]==0&&b[i-iColumn+7]==0&&c[i+iColumn]==0)
		{
			queen[i][iColumn]='@';
			a[iColumn]=1;
			b[i-iColumn+7]=1;
			c[i+iColumn]=1;
			if(i<7)
				qu(i+1);
			else
			{
				int l,cc;
				printf("Solution No.%d:\n",++iQueenNum);
				for(l=0;l<8;l++)
				{
					for(cc=0;cc<8;cc++)
					{
						printf("%c ",queen[l][cc]);
					}
					printf("\n");
				}
			}	
			queen[i][iColumn]='*';
			a[iColumn]=0;
			b[i-iColumn+7]=0;
			c[i+iColumn]=0;

		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?