| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1012 人关注过本帖
标题:八皇后问题求助
取消只看楼主 加入收藏
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
八皇后问题求助
#include<iostream>
using namespace std;
int col[8],Left[15],Right[15];
int queen[8];
int n=0;
int sum=0;
void generate()
{
    int h,i;
    for(h=0;h<=7;h++)
    {
        if(col[h]&& Left[n+h]&& Right[n-h+7])
        {
            queen[n]=h;
            col[h]=false;
            Left[n+h]=false;
            Right[n-h+7]=false;
            n+=1;
            if(n==8)
            {
                sum++;
                cout<<" "<<sum;
                for(i=0;i<=7;i++)
                    cout<<"\t"<<queen[i];
                cout<<endl;
            }
            else generate();
            n--;
            Left[n+h]=true;
            Right[n-h+7]=true;
            col[h]=true;
        }
    }
}
void main()
{
    int c,s;
    for(c=0;c<=7;++c)
        col[c]=true;
    for(s=0;s<=14;++s)
    {
        Left[s]=true;
        Right[s]=true;
    }
    cout<<"行数 :\t0\t1\t2\t3\t4\t5\t6\t7"<<endl;
    generate();
    cout<<"八皇后摆法总数:"<<sum<<endl;
}



n代表列数;h代表行数。
能不能帮忙给讲解一下!急……
搜索更多相关主题的帖子: 皇后 
2009-09-01 09:06
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
急……
2009-09-01 09:44
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
看来好多人都是菜鸟啊!!!!!!!!!!!!!!!!!!!!!
不要出来瞎转悠!寒嘇人!
2009-09-01 10:49
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
高手怎么不露面啊!
2009-09-01 10:58
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
唉!把棋盘改成了在行列!
2009-09-01 11:00
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
行数:0 1 2 3 4 5 6 7
1    0 4 7 5 2 6 1 3
 2    0 5 7 2 6 3 1 4
 3    0 6 3 5 7 1 4 2
 4    0 6 4 7 1 3 5 2
          ……
2009-09-01 11:07
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
此题的基本思想是:先把0号皇后放在(0,0)位置,然后把1号皇后放在(1,j)位置,使其满足要求。接着放2号皇后,依次类推。遇到某个皇后如把她无论放在该行的任何位置均不满足要求,则前一个皇后放置不当,须重新放之前一皇后。如8戈皇后均按要求放置好,这就是一次成功的摆法。再如前所述,从新找下一个摆法。
为了找出某行某列是否能放置皇后的条件,则须进一步找出此棋盘的规律
 
 0    1    2     3    4     5     6    7   
0                           
1
                       
⊙2                             
3                           
4                           
5                           
6                           
7                           

如图所示的八皇后的放法原理图,已有皇后(5,1),对此棋盘有以下性质:每一格的行号加上列号等于一个常量,15条Left方向对角线对应的常量分别为0,1,2,…,14。15条Right方向的对角线,每条对角线的各个方格对应的行号与列号之差也是一个常量,分别是-7,-6,-5,…,6,7。
使用数组col[]表示列方向使用情况,其值为1,表示所在列空,可放置新皇后,值为0则不可放置。类似,用Left[]、Right[]则分别表示如图所示的对角线的使用情况。这样,第n行第h列的位置能放置皇后的条件,即下表达式为真:
col[h]&& Left[n+h]&& Right[n-h+7]
C++语言规定数组下标从0开始,故Right方向表达式写作Right[n-h+7]。
现在明白了吧!
快啊!
急……
2009-09-01 11:27
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
我如果不冲你能说话吗!
2009-09-01 11:33
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
晕!你没事吧!
2009-09-02 08:44
lizhe303
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-9-1
收藏
得分:0 
晕!你没事吧!
2009-09-02 08:45
快速回复:八皇后问题求助
数据加载中...
 
   



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

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