| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:利用栈解决八皇后问题出现无限循环,求解决
只看楼主 加入收藏
YUN_P
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2014-6-4
结帖率:100%
收藏
 问题点数:0 回复次数:0 
利用栈解决八皇后问题出现无限循环,求解决
const int StackSize=8;//设定8个皇后
int ans=0;

template<class T>
class Queen
{
    public:
        Queen(){top=-1;}//初始化空栈
        void Push(T x);//入栈
        void Pop();//出栈
        void PlaceQueen(int n);//放皇后
        bool JudgeQueen();//判断皇后位置
        void Print();//打印位置
        bool Empty()//判断栈是否为空
        {
            if(top==-1)
                return true;
            else
                return false;
        };
    private:
        T data[StackSize];
        int top;
};

template<class T>
void Queen<T>::Push(T x)
{
    if (top >=(StackSize-1)) throw"上溢";
    top++;
    data[top]=x;
};

template<class T>
void Queen<T>::Pop()
{
    if(Empty())throw"下溢";
    top--;
};

template<class T>
void Queen<T>::PlaceQueen(int n)
{
    for(int p=0;p<StackSize;p++)
    {
        Push(p);
        if (JudgeQueen())
        {
            if(n<StackSize-1)
                PlaceQueen(p+1);
            else
            {
                ans++;
                Print();
            }
        }
        Pop();
    }
}

template<class T>
bool Queen<T>::JudgeQueen()
{
    for(int i=0;i<top;i++)
        if(data[top]==data[i]||(abs(data[top]-data[i]))==(top-i))
            return false;
    return true;
};

template<class T>
void Queen<T>::Print()
{
    cout<<"NO."<<ans<<":"<<endl;
    for(int i=0;i<StackSize;i++)
    {
        for(int j=0;j<data[i];j++)
            cout<<"-";
        cout<<"Q";
        for(int j=StackSize-1;j>data[i];j--)
            cout<<"-";
        cout<<endl;
    }
    cout<<endl;
};


#include<iostream>
#include"Queen.h"
#include<Windows.h>
using namespace std;
void main()
{
    Queen<int> Q;
    Q.PlaceQueen(0);
    cout<<"总数"<<ans<<endl;
    system("pause");
}

我运行出来只有一个结果,然后就是后面无限循环。
搜索更多相关主题的帖子: private public return false 
2014-11-26 22:49
快速回复:利用栈解决八皇后问题出现无限循环,求解决
数据加载中...
 
   



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

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