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

原创 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;
}

运行结果:

运行结果

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

数据结构 - 树和二叉树的基本运算实现

实验题目设计一个程序exp7-6.cpp,构造一棵哈夫曼树,输出对应的哈夫曼编码和平均查找长度。并用表7.8所示的数据进行验证。实验目的掌握哈夫曼树的构造过程和哈夫曼编码的产生方法;灵活运用二叉树这种...
  • mayuko2012
  • mayuko2012
  • 2016年06月21日 23:06
  • 750

队列的顺序存储结构及其基本运算的实现

代码: #include #include using namespace std; const int maxn=500; typedef struct { int d...
  • sr19930829
  • sr19930829
  • 2014年04月02日 18:56
  • 1407

数据结构实验报告 栈和队列

一、实验目的1.掌握栈、队列的思想及其存储实现。 2.掌握栈、队列的常见算法的程序实现。二、实验仪器及环境:PC计算机 windows 7操作系统 CodeBlocks10.05三、实验内容...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年04月26日 20:30
  • 1588

【数据结构】 栈和队列 YTU 2248: 栈的基本运算(栈和队列)

题目描述 利用栈的基本运算,编写一个算法输入若干整数,以0标识输入结束。然后按与输入相反次序输出这些整数。 输入 输入: 1 2 3 4 5 0 输出 输出: 5 4...
  • Little_boy_z
  • Little_boy_z
  • 2016年05月17日 13:49
  • 197

栈——顺序存储结构及其基本运算

该文章主要介绍栈的顺序存储结构以及相关运算。 头文件:SqStack.h template class SqStackClass //顺序栈类 { T *data; //存放栈中...
  • seu_nuaa_zc
  • seu_nuaa_zc
  • 2017年06月12日 23:08
  • 147

数据结构 顺序串的各种基本运算

#include #include #include using namespace std; #define MaxSize 100 typedef struct { char data[...
  • a716121
  • a716121
  • 2016年04月01日 10:32
  • 1136

数据结构的Java实现——栈和队列

栈(Stack)作为一个先进后出(FILO) 的线性结构,只支持在栈顶的插入和弹出。队列(Queue)作为一个先进先出(FIFO) 的线性结构,支持在队首获取元素,在对尾插入元素。 栈的实现: p...
  • baoyiming1991
  • baoyiming1991
  • 2011年03月21日 22:35
  • 6016

数据结构与算法(C++版):表、栈和队列

前言本系列博客为学习数据结构与算法过程中的原创笔记,其中代码实现基于C++语言。STL中的向量和表在C++语言的库中包含有公共数据结构的实现,这就是众所周知的标准模版库(Standard Templa...
  • u013271326
  • u013271326
  • 2017年06月06日 11:37
  • 243

《数据结构》实验三:栈和队列实验 (实验报告)

一.实验目的      巩固栈和队列数据结构,学会运用栈和队列。 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。 2.学习运用栈和队列的知识来解决实际问...
  • denise94
  • denise94
  • 2014年11月05日 12:08
  • 4948

数据结构-栈和队列小结

1栈   1>栈的定义:       栈是限定仅在表尾进行插入和删除操作的线性表。       我们把插入和删除的一端称为栈顶(TOP),另一端称为栈底(BOTTOM),不包含任何元素的栈称为空...
  • XiangTianZaiJie500
  • XiangTianZaiJie500
  • 2016年10月24日 17:22
  • 1348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构 - 栈和队列的基本运算实现
举报原因:
原因补充:

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