栈和队列问题实验报告
数据结构实验报告 实验名称: 实验2 ——栈和队列
学生姓名:
1(实验要求
1.实验目的
通过选择下面五个题目之一进行实现,掌握如下
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
:
, 进一步掌握指针、
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
类、异常处理的使用
, 掌握栈的操作的实现方法
, 掌握队列的操作的实现方法
, 学习使用栈解决实际问题的能力
, 学习使用队列解决实际问题的能力
2.实验要求
利用栈结构实现八皇后问题。
八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上
放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线
上。请
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
算法打印所有可能的摆放方法。
提示:
1、可以使用递归或非递归两种方法实现
2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上
2. 程序
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
#include
#include
using namespace std;
#define N 10
class Queen
{
public:
Queen(){num=-1;}
void Print(int n);//输出皇后的排列,打出的数字为每个皇后的坐标
int Check(int i,int k);//判断位置是否符合要求
void Queens(int k,int n);//递归调用
int count();//计数
private:
int q[N];
int num;
};
int main()
{
Queen Q;
int n;
cout<<"请输入Queen的数目(n>0):"<>n;
if(n>0)
{
cout<<"Queen可能的位置坐标:"<n)//如果达到要求的数量输出皇后排列
{ Print(n);
count();
}
else //否则在适当的位置添加一个新皇后
{
for(i=1;i<=n;i++)
if(Check(i,k)) //判断该行中该位置放置'皇后'是否符合要求
{
q[k]=i; //记录改行中该点的位置
Queens(k+1,n); //放置下一行的'皇后'
}
}
}
void Queen::Print(int n) {
int i;
for(i=1;i<=n;i++)
cout<<"("<n)//如果达到要求的数量输出皇后排列
{ Print(n);
count();
}
else //否则在适当的位置添加一个新皇后
{
for(i=1;i<=n;i++)
if(Check(i,k)) //判断该行中该位置放置'皇后'是否符合要求
{
q[k]=i; //记录改行中该点的位置
Queens(k+1,n); //放置下一行的'皇后'
}
}
}
算法步骤:
1.如果输入的K大于皇后的最大数量,则输出皇后的位置 2.如果小于或等于皇后的最大数量,则i从1开始递增
3.检测(k,i)点是否符合条件,如果不符合则i++,符合则转到下一次循环 时间复杂度为:O(n?)
2.3 其他
说明:本程序可以由用户输入由1到8 的任意数作为皇后数,输出的结果为每个皇后对应的坐标,第一个位子为(1,1)坐标以从左向右的方向为X 轴正方向,以从上到下为Y 轴正方向,去棋盘的长宽为输入的皇后数。
3. 程序运行结果
1.测试主函数流程:
开始
输入n
Y
输出结果 k>n,
N
N 判断位置(i,k)i++
是否符合要求
Y
q[k]=i
k++
2.测试条件:输入的数为1~8的整数
3.运行结果:
4. 总结
1.出现的问题:编程时,在使用递归结构式总是不能很好的把握结构中的各类循环嵌套如for和if结构等的运行的顺序,且一开始时并没能很快的完全搞清八皇后问题的整个解题思路。在实现check检查函数,一开始总是找不到正确的方法去判断皇后是否在同一列上,后来,在同学和老师的帮助下终于弄懂。
开始输出时发现如果全部输出皇后的位置,就会导致输出空间不够,无法将八皇后的92种解法全部输出,后来改用了坐标的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达方法,解决了这个问题。
2.总结:这次试验让我更好的熟悉了栈和递归函数的应用,对于栈的问题有了更好的了解,也让我学会了用递归的算法解决一些数学问题。
3.改进:我的程序中,不仅可以计算出八皇后的排列方法,而且可以根据用户输入的1~8的任意整数计算出皇后的排列方法,这是对算法一个小小的改进。