注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚楼听风雨

没有理想的人,永远也不能翱翔与蓝天白云之上~

 
 
 

日志

 
 

把皇后问题算法实现(C++)  

2007-11-22 01:08:07|  分类: 算法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来自李春葆老师编写的数据结构教程与上机实验指导,这本书不错!

#include <stdio.h>
#include <stdlib.h> 
int q[9];              /*存放各皇后所在的行号*/
int cont=0;            /*存放解个数*/
void print(int n)     /*输出一个解*/
{
 cont++;
 int i;
 printf("  第%d个解:",cont);
 for (i=1;i<=n;i++)
  printf("%d ",q[i]);
 printf("\n");
}
int find(int i,int k)  /*测试第k列的i行上能否摆放皇后*/
{
 int j;
 j=1;
 while (j<k)        /*j=1~k-1是已放置了皇后的列*/
 {
     if ((q[j]==i) || (abs(q[j]-i)==abs(j-k)))
            /*第j列皇后是否在i行或(q[j],j)与(i,k)是否同对角线*/
      return 0;
     j++;
 }
 return 1;
}
void place(int k,int n) /*第k个皇后放到第k列上*/
{
 if (k>n)
  print(n);           /*所有皇后放置结束*/
 else
  for (int i=1;i<=n;i++)  /*在第k列上穷举每一个位置*/
      if (find(i,k)) 
   {
    q[k]=i;place(k+1,n);
       }
}
void main()
{
 int n;          /*n存放实际皇后个数*/
 printf(" 皇后问题(n<20) n=");
 scanf("%d",&n);
 if (n>20)
  printf("n值太大,不能求解\n");
 else
 {
  printf(" %d皇后问题求解如下:\n",n);
  place(1,n);
  printf("\n");
    }
}

  评论这张
 
阅读(114)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017