数据结构实验报告--八皇后

时间:2024.3.19

数据结构实验报告

1.实验要求

实验目的:利用栈结构实现八皇后问题

八皇后问题如下:八皇后问题是19世纪著名的数学家高斯于1850年提出的。他的问题是,在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列,同一斜线上。

实验内容:利用所学的栈结构用递归或非递归解决八皇后问题。

2. 程序分析

   程序使用程序最主要只是在主函数用了一个递归函数Queen。

Queen函数使用了三个参数m,flag[][],chess[][]。其中m是行数,flag[][]是判断二维数组何处可以放置皇后,chess[][]是存储字符串的二维数组。

主函数中对Queen函数中的形参数组flag[][],chess[][]进行初始化,在Queen函数中再进行各种操作。

Queen函数执行代码,首先行数m为0,当m小于7时,通过if…else…语句,利用Queen(m+1,f,c)重新执行递归函数到下一行。

2.1 存储结构

存储结构:数组存储。

 flag[][]数组存储数字判断输出和储能放置皇后,chess[][]数组存储字符串即皇后和非皇后的形状。

2.2 关键算法分析

1、关键算法:

a.

for(i=0;i<8;i++)               

                   for(j=0;j<8;j++) 

                   {

                        f[i][j]=0;

                  c[i][j]='*';              

说明:对棋盘进行初始化

未放置皇后的为“*”

b.

for(i=0;i<8;i++)                            

                            for(j=0;j<8;j++) 

                            {

                                   c[i][j]=chess[i][j];        

                    f[i][j]=flag[i][j];  

                         }

说明:对c[][],f[][]进行初始化。

c.

for(i=0;i<8;i++) 

                                   for(j=0;j<8;j++) 

                                   {

if(f[i][j]==0 && (i+j==m+k || m==i || k==j || m-k==i-j))                            f[i][j]=-1;   

                                   }

                                c[m][k]='#';                                   

说明:已放置皇后的行、列以及对角线都不能再放置皇后。

已放置皇后的显示为“#”。

d.

if(m==7)                                      

                                   { 

                                          cout<<"算法的第"<<++count<<"个解为:"<<endl;                                      for(int i=0;i<8;i++)

                                          {

                                                 for(int j=0;j<8;j++) 

                                                 { 

                                                        cout<<c[i][j]<<" ";                                                                    } 

                                                 cout<<endl; 

                                          }  

                                       cout<<endl;    

                        cout<<endl;

                                       return; 

                                   }

                                else Queen(m+1,f,c);                           

说明:首先判断是否已执行到最后一行

每输出一个算法,count计数器加1

若没有执行到最后一行,m+1继续执行Queen函数

2.3 其他

    要求程序在一开始创建一个统计算法解个数的加法器。

3.  程序运行结果

1、 测试主函数流程:流程图如图所示

2、 测试结论:输出解决算法的个数及八皇后问题的图解。

4.  总结

一.问题及解决办法

  1.一开始编的时候对同一行,同一列以及同一斜行不能排皇后的算法不能准确编写,后来通过画图发现了这三个情况数组行标和列标的特点,从而解决了这个问题。

2.程序只能输出从65至99的解,其他解不显示,后来发现是因为界面太小的原因。

二.心得体会

  对于刚学的栈表以及递归函数一定要多用才能熟悉,才能知道实现的具体细节问题。对一些出现的错误一点要仔细分析,明白以后就会掌握的很牢固。对于递归函数一定要充分理解它的意义才能用好它。

在编写代码中如果对于一些抽象的算法构思感到困难,可以通过画图,在纸上先进行演算推导出各变量之间的关系,再进行编写可能会使问题变得简单明了一些。

三.改进

  递归算法解决八皇后问题比较简单明了,下次可以尝试不使用递归而用非递归编写算法,这样可能会更牢固更好的掌握栈的思想,巩固已学的知识。


第二篇:数据结构实验报告(实验八 内部排序算法比较)


                           

                 

实验课程名称:数据结构与算法

实验项目名称:实验八  排序与查找算法

内部排序算法比较

实验类型(打√):(基础   、综合   、设计√   

    系:信息工程学院计算机系     业:*****

    名:***                      号:*****

指导老师:陈正铭

              韶关学院教务处编制

一、实验预习报告内容

                                                   预习日期:20##年 6 月 26

                     二、实验原始(数据)记录

间: 20## 27 日(星期   78 节)

实验同组人

                            三、实验报告内容
                                        20##年 6 月
27 

注:1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。

2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。 

【源程序】参考《数据结构题集》P172~177详细设计代码部分

更多相关推荐:
八皇后实验报告

实验项目1实验目的通过求解皇后问题熟悉深度优先搜索法DFS回溯法BacktrackingAlgorithms技术2实验内容由n2个方块排成n行n列的正方形称为n元棋盘如果两个皇后位于n元棋盘上的同一行同一列或同...

数据结构实验报告-八皇后问题

北京邮电大学电信工程学院20xx级数据结构实验报告实验名称实验2利用栈结构实现八皇后问题学生姓名班级20xx21班内序号学号日期20xx年11月5日1实验要求利用栈结构实现八皇后问题八皇后问题19世纪著名的数学...

八皇后实验报告

北京邮电大学信息与通信工程学院数据结构实验报告实验名称实验二八皇后问题学生姓名姜山班级20xx211106班内序号14学号20xx210167日期20xx年11月16日1实验要求实验目的1进一步掌握指针模板类异...

八皇后实验报告

实验名称编程实现八皇后问题验证性实验实验目标使用深度优先搜索算法以及回溯法的思想进行暴力解题实验任务用88的二维数组去模拟皇后所在的棋盘然后用1标记该位置可以放皇后用0来标记该位置不可以放皇后然后每次有一个合理...

八皇后数据结构实验报告 完整版

数据结构实验报告八皇后问题实验目的熟练掌握栈操作的基本算法实现实现功能利用回溯法和栈来实现八皇后问题在88的国际象棋棋盘上安放8个皇后要求没有一个皇后能够吃掉任何其他一个皇后即没有两个或两个以上的皇后占据棋盘上...

八皇后实验报告

目录一二三四五六引言2算法分析及流程2实验过程分析4结果与讨论5改进5结语7一算法分析及流程1八皇后问题是一个古老而著名的问题该问题是十九世纪著名的数学家高斯1850提出在88格的国际象棋上摆放八皇后使其不能互...

八皇后问题实验报告

软件工程上机报告实验名称八皇后问题图形界面求解姓名郭恂学号20xx011435班级11级数学班中国石油大学北京计算机科学与技术系一试验程序截图点击显示下一组解即可显示下一组解同样的如果点击上一组解即可显示上一组...

北邮c++八皇后数据结构实验报告

北京邮电大学信息与通信工程学院数据结构实验报告实验名称实验二栈和队列学生姓名班级班内序号学号日期1实验要求实验目的1进一步掌握指针模板类异常处理的使用2掌握栈的操作的实现方法3掌握队列的操作的实现方法4学习使用...

计算机八皇后、计算机实验报告

编号字号软件课程设计报告1软件课程设计任务书专业年级学生姓名任务下达日期200年月日课程设计日期200年月日至200年月日课程设计题目面向过程23软件课程设计指导教师评阅书指导教师评语基础理论及基本技能的掌握独...

c++利用栈解决八皇后问题 数据结构实验报告

XX级数据结构实验报告实验名称实验二栈和队列学生姓名班级班内序号学号日期1实验要求实验目的1进一步掌握指针模板类异常处理的使用2掌握栈的操作的实现方法3掌握队列的操作的实现方法4学习使用栈解决实际问题的能力5学...

数据结构实验报告——栈(八皇后问题)

1实验要求实验目的1进一步掌握指针模板类异常处理的使用2掌握栈的操作的实现方法3掌握队列的操作的实现方法4学习使用栈解决实际问题的能力5学习使用队列解决实际问题的能力实验内容利用栈结构实现八皇后问题八皇后问题1...

数据结构实验报告利用栈结构实现八皇后问题

北京邮电大学信息与通信工程学院数据结构实验报告实验名称实验二利用栈结构实现八皇后问题学生姓名班级班内序号学号日期20xx年11月21日1实验要求1实验目的通过选择下面五个题目之一进行实现掌握如下内容进一步掌握指...

八皇后实验报告(30篇)