经典八皇后问题;

 贴个八皇后的代码, 免得以后忘了,呵呵。

 

 #include "stdio.h"

 

int Total = 0;

typedef struct tag_Quiz
{
 int Steps;  // 0, 1, 2, 3, 4,  5, 6, 7, 8
 int Chose[8]; 
} Quiz;


int CheckMap(Quiz Map)
{
 /*  check the last step */
 int i;
 

 if (Map.Steps == 1)
 {
  return 1;
 }

 for (i = 0; i < Map.Steps -1; i++)
 {
  /* check Map.Chose[i]  and Map.Chose[Map.Steps-1] */
  if ( Map.Chose[i] == Map.Chose[Map.Steps-1])
  {
   return 0;
  }

  if ( abs(Map.Chose[i] - Map.Chose[Map.Steps-1]) ==
   abs(Map.Steps - 1 - i) )
  {
   return 0;
  }
 }

 return 1;
}

 

void Queen4(Quiz Map)
{

 /******************************** Print Map ****************/
 int  i;
 char*   Info[8] = {
      "# 0 0 0 0 0 0 0 /n",
      "0 # 0 0 0 0 0 0 /n",
      "0 0 # 0 0 0 0 0 /n",
      "0 0 0 # 0 0 0 0 /n",
      "0 0 0 0 # 0 0 0 /n",
      "0 0 0 0 0 # 0 0 /n",
      "0 0 0 0 0 0 # 0 /n",
      "0 0 0 0 0 0 0 # /n",
       };
 int oldStep = Map.Steps;

 if (Map.Steps == 8)
 {
  printf("/nMap Layout <%d> : /n", ++Total);
  // printf Map;
  for (i = 0; i < 8; i++)
  {
   printf(Info[Map.Chose[i]]);
  }
  return ;
 }

 
 
 Map.Steps++;
 for ( i = 0; i < 8; i++)
 {
  Map.Chose[Map.Steps -1] = i;
  if (CheckMap(Map))
  {
   Queen4(Map);
  }
 }
}

 


void
main(
  void
  )
{
 Quiz puzz;
 puzz.Steps = 0;
 Queen4(puzz);

 printf("/n/nTotal Array ==> %d /n", Total);


 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值