国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

八皇后問題的非遞歸實現

2019-11-17 05:11:30
字體:
來源:轉載
供稿:網友

  我們都知道八皇后問題是一個很經典的問題,當時很多解決八皇后問題的編程解法都是用遞歸解法,下面我用非遞歸的解法來實現如下:

  其中有關設置標志位來表示該位是否可以下皇后的原理,請看鄭啟華的《pascal程序設計(第二版)>〉清華大學出版社出版的。代碼如下:

#include

#define available 1 //用來標志該位是否可用,availabel表示可用,unailable表示不可


#define unavailable 0

#define true 1

#define false 0

int j,top=-1,flag,i,is_pop,total=0;
  // top用來保存棧頂指針,flag用來說明該次是否成功下了一個皇后
    //is_pop用來說明是否把棧彈出,total用來保存共有多少種下法
    //i用來保存下一次皇后應下的列

int stack[8],a[15],b[15],c[7];
   //stack保存皇后的位置,a,b,c三個數住用來保存該位是否可以下皇后

void init(void);//初始化各位狀態,使之可以下皇后

void release (void);//當該列都不能下皇后,則解除上次下皇后試對相關位的鎖定

main()

{

  cout<
  init();

  is_pop=false;//初始化

  for( ; ;)

  {

   do {

    for (j=is_pop? stack[i]+1:0;j<=7;j++)

     if (a[i+j]&&b[i-j+7]&&c[j])//判定該位是否可用
      {//若可用,則棧頂指針上移,在該位存入皇后號

      top++;

      stack[top]=j;

      a[i+j]=b[i-j+7]=c[j]=unavailable;//并把相關位設為不可用

      i++;//i指向下一個應填入皇后德列

      flag=true;//設標志,說明成功

      is_pop=false;

      break;//則直接退出循環

     }

    if (!flag)//若不成功,則釋放被鎖定的位

     release();

    flag=false;

    if (stack[0]+1==8&&top==-1)//若第一列也沒有位置可以放皇后,

      goto END; //則說明沒有其他的放法了,則退出

   }

   while (top!=7);

   for (int k=0;k<=7;k++)

    cout

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沂水县| 松阳县| 崇礼县| 台江县| 东莞市| 手机| 平山县| 双峰县| 汉川市| 米林县| 玉林市| 迁安市| 陆丰市| 鄂尔多斯市| 资中县| 民县| 兴业县| 贡觉县| 彭水| 洛南县| 昌江| 天台县| 南召县| 梧州市| 宁津县| 武义县| 武穴市| 通辽市| 奇台县| 日照市| 临泉县| 迭部县| 兰溪市| 阳西县| 安宁市| 萨嘎县| 遂宁市| 滨海县| 兰溪市| 大姚县| 金阳县|