递归-回溯法求解8皇后问题

以下内容为程序代码:

/* 本程序使用递归-回溯法求解8皇后问题。Visual C++ 6.0 调试通过。 */

#include <stdio.h >
#include <conio.h >
#include <math.h >

#define QUEENS 8

int iCount = 0;

int Site[QUEENS];

void Output(void);

void Queen(int n);

int IsValid(int n);

/*----------------------------Main:主函数。----------------------------*/
void main()
{
Queen(0);

getch();
}

/*-----------------Queen:递归放置第n个皇后,程序的核心!----------------*/
void Queen(int n)
{
int i;

if(n == QUEENS)
{
  Output();
  return;
}

for(i = 1 ; i <= QUEENS ; i++)
{
  Site[n] = i;

  if(IsValid(n))
    Queen(n + 1);
}
}

/*------IsValid:判断第n个皇后放上去之后,是否合法,即是否无冲突。------*/
int IsValid(int n)
{
int i;

for(i = 0 ; i < n ; i++)
{
   if(Site == Site[n])
     return 0;

   if(abs(Site - Site[n]) == (n - i))
     return 0;
}

return 1;
}

/*------------Output:输出一个解,即一种没有冲突的放置方案。------------*/
void Output(void)
{
int i;

printf( "No.%-5d " , ++iCount);

for(i = 0 ; i < QUEENS ; i++)
   printf( "%d " , Site);

printf( "/n ");

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值