数据结构 - 栈和队列的基本运算实现

原创 2016年06月01日 18:00:42

实验目的:

编写一个程序exp3-6.cpp,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。
要求:(1)皇后的个数n由用户输入,其值不能超过20,输出所有的解。(2)采用类似于栈求解迷宫问题的方法。

源码:

#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#define maxsize 20
using namespace std;

int count=0;//计数器

class SqStack
{
private:
    int data[maxsize];
    int top;
public:
    SqStack()
    {
        top=-1;
    }
    void Push(int,int);
    void Pop();
    void Show(int);
    void Mothed(int,int);
    bool Judge(int);
    bool Empty()
    {
        if(top==-1) return true;
        else return false;
    }

};

void SqStack::Push(int x,int n)//入栈操作
{
    if(top>=n-1)
        cerr<<"error"<<endl;
    top++;
    data[top]=x;
}

void SqStack::Pop()//出栈操作
{
    if(Empty())
        cerr<<"error"<<endl;
    top--;
}

bool SqStack::Judge(int k)// 判断皇后k放在x[k]列是否发生冲突
{
    for(int i=0; i<top; i++)
        if(data[top]==data[i]||(abs(data[top]-data[i]))==(top-i))
            return false;
    return true;
}

void SqStack::Mothed(int n,int row)//放置皇后,进行递归
{
    for (int col=0; col<n; col++)
    {
        Push(col,n);
        if (Judge(row))
        {
            if (row<n-1)
                Mothed(n,row+1);
            else
            {
                count++;
                Show(n);
            }
        }
        Pop();
    }
}

void SqStack::Show(int n)//打印皇后序列
{
    cout<<"第"<<count<<"个解:";
    for (int i=1; i<=n; i++)
    {
        cout<<"("<<i<<","<<data[i-1]+1<<")"<<" ";
    }
    cout<<endl;
}

int main()
{
    int n;
    cout<<"皇后问题(n<20) n=";
    cin>>n;
    SqStack queen;
    queen.Mothed(n,0);
    return 0;
}

运行结果:

运行结果

版权声明:本文为博主原创文章,未经博主允许不得转载,复制。 举报

相关文章推荐

数据结构 - 栈和队列的基本运算实现

实验目的:编写一个程序exp3-6.cpp,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。 要求:(1)皇后的个数n由用户输入,其值不能超过20,输出...

基本数据结构(栈和队列)

栈、队列、优先级队列和双端队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则教线性表有更多的限制,故又称为运算受限的线性表。 栈 栈是一种最常用和最重要的数据结构,它的用途非常广泛。...
  • Linoi
  • Linoi
  • 2013-12-26 17:15
  • 1148

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

“栈和队列”之队列--基本数据结构

第一期:在队列中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(first-in,first-out,FIFO)策略; 队列上的INSERT操作称之为入队(ENQUEUE),D...

两个栈实现一个队列,两个队列实现一个栈

问题1:用两个栈实现一个队列,实现队列的push和delete操作 栈的特性是先进后出(FILO),队列的特性是先进先出(FIFO),在实现delete时,我们的难点是如何将栈中最底层的数据拿出来,...

数据结构基础_栈和队列

来聊聊栈和队列,和数组比较栈和队列有插入数据迅速的优势,但是在查找数据时就没有数组来的快了。下面的代码实现了用数组实现栈,用链表实现队列以及用链表实现栈。          用数组实现栈 packag...

用两个队列实现栈和用两个栈实现队列

用两个栈实现一个队列和用两个队列实现一个栈

基本数据结构-队列的实现及其运用

二、队列     队列是一种先进先出的数据结构,元素只能添加到队尾,而对元素的删除,修改,检索只能在队头进行。与栈的差异是很明显的。同样队列的实现可以基于链表,也可以基于数组。和栈的基本操作差不...

数据结构实验 栈和队列

(1)采用链式存储实现栈的初始化、入栈、出栈操作。 (2)采用顺序存储实现栈的初始化、入栈、出栈操作。 (3)采用链式存储实现队列的初始化、入队、出队操作。 (4)采用顺序存储实现循环队列的初始化、入...

栈和队列的基本运算实现

编写一个程序exp3-6.cpp,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。 要求:(1)皇后的个数n由用户输入,其值不能超过20,输出所有的解。...

数据结构算法代码实现——栈和队列(二)

队列的定义 和栈相反,队列(queue)是一种先进先出(FIFO)的线性表。它只允许在表的一端经行插入,而在另一端删除删除。 我们把允许进行删除的一端称为队头,允许插入的一端称为队尾。 在插入新元...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)