| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖
标题:求教八皇后问题,枚举算法
取消只看楼主 加入收藏
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求教八皇后问题,枚举算法
我知道回溯法很简单,但是看不懂啊,结果看到了枚举法,俺的娘,还是看不懂,大家帮忙分析下,谢谢,枚举法应该是用总的办法减去受条件拘束的办法,可是还是没思路
程序代码:
#include <iostream>
using namespace std;
bool check_1(int a[],int n)
{
for(int i=2;i<=n;i++)//bool是怎么判断的
{
    for(int j=1;j<=i-1;j++)
    {
        if ((a[i]==a[j])||(abs(a[i]-a[j])==i-j))
        {
            return false;
        }
    }
}
return true;
}
void queens_1()
{
    int a[9];
    int count = 0;
    for(a[1]=1;a[1]<=8;a[1]++)//这一大串for是用来干嘛的,可不可以算出执行一次后的结果
    {
        for(a[2]=1;a[2]<=8;a[2]++)
        {
            for(a[3]=1;a[3]<=8;a[3]++)
            {
                for(a[4]=1;a[4]<=8;a[4]++)
                {
                    for(a[5]=1;a[5]<=8;a[5]++)
                    {
                        for(a[6]=1;a[6]<=8;a[6]++)
                        {
                            for(a[7]=1;a[7]<=8;a[7]++)
                            {
                                for(a[8]=1;a[8]<=8;a[8]++)
                                {
                                    if(!check_1(a,8)) 
                                        continue;
                                    else
                                    {
                                        for(int i=1;i<=8;i++) //这里是什么意思
                                        {
                                            cout<<a[i];
                                        }
                                        cout<<endl;
                                        count++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cout<<count<<endl;
}
void main()
{
    queens_1();
}
2014-08-18 22:45
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-18 22:56
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
求解啊!!

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-19 12:53
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 4 楼 vvvcuu
斑竹,炒鸡感谢

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-19 15:46
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 4 楼 vvvcuu
确实,二维更好一点!!a[]咋一看还不知道是定义的行还是列!

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-19 15:49
l3456
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:133
注 册:2014-4-16
收藏
得分:0 
回复 4 楼 vvvcuu
忘了,还有中间一大堆for的嵌套是什么意思,我觉得应该是列出所有摆放方法,但是不明白for括号里的循环条件,例如for(a[1]=1;a[1]<=8;a[1]++)我觉得a[1]里的1代表的是行,而=的1是列,a[1]++应该是第一行坐标的表示方法对吧

走向光明的菜鸟学生,励志成为新一代程序猿
2014-08-19 15:56
快速回复:求教八皇后问题,枚举算法
数据加载中...
 
   



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

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