| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3534 人关注过本帖
标题:八皇后(回朔法)
取消只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
 问题点数:0 回复次数:0 
八皇后(回朔法)
#include <iostream>
# include <math.h>
using namespace std;
int total = 0;      //方案计数
void main(){  
  int queen[8];
  int i, j, k;
  for (i=0;i<8;i++)  queen[i] = 0;           //八皇后全放在第0列
  for (i=1;;){                               //首先安放第0行皇后
    if(queen[i]<8){                          //皇后还可调整
      k=0;                                   //检查与第k个皇后是否互相攻击
      while(k<i&&abs(queen[k]-queen[i])&&(abs(queen[k]-queen[i])-abs(k-i)))  k++;
      if (k<=i-1){                           //与第k个皇后互相攻击
        queen[i]++;                          //第i个皇后右移一列,重测
        continue;
      }
      i++;                                   //无冲突,安置下一行皇后
      if(i<8) continue;
      for(j=0;j<8;j++) cout<<queen[j];       //已完成,输出结果      
      cout<<"  ";
   total++;                               //方案数加1
      if(total%5==0) cout<<endl;
      queen[7]++;                            // 将第7个皇后右移一列,前7个不动
      i=7;                           //此处是制造机会,如不成功则回溯,关键一步
    }
    else                                     //当前行皇后无法安置,回溯
    {
      queen[i]=0;                            //当前行皇后回归0列
      i--;                                   //回溯到前一行皇后
      if(i<0){                               //回溯到数组0行之前,结束
        cout<<" 总数:"<<total<<endl;
        return;
      }
      else queen[i]++;             //前一行皇后右移一列
    }
  }  
}
搜索更多相关主题的帖子: 皇后 queen int abs include 
2005-05-12 07:32
快速回复:八皇后(回朔法)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022670 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved