第一范文网 - 专业文章范例文档资料分享平台

《算法设计与分析》实验二09770106刘东辉

来源:用户分享 时间:2025/6/26 10:53:01 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

学 号 09770106

《算法设计与分析》

实验报告二

学专指成

生业导、

姓班教

名 刘东辉 级 师 绩

软件一班 唐国峰

电子与信息工程系 2011 年 11 月 17 日

实验二:典型算法的理解与应用

一、实验目的

本次实验是针对书上各章节所阐述的算法的相关应用练习,旨在加深学生对该部分知识的理解,提高学生运用该算法解决问题的能力。

二、实验步骤与要求

1.实验前复习课程所学知识以及阅读和理解指定的课外阅读材料; 2.学生独自完成实验指定内容;

3.实验结束后,用统一的实验报告模板编写实验报告。

4.提交说明:

(1)电子版提交说明:

a 需要提交Winrar压缩包,文件名为“《算法设计与分析》实验二_学号_姓名”, 如“《算法设计与分析》实验二_07770101_张三”。

b 压缩包内为一个“《算法设计与分析》实验二_学号_姓名”命名的顶层文件夹,

其下为两个文件夹,一个文件夹命名为“源程序”,另一个文件夹命名为“实验 报告电子版”。其下分别放置对应实验成果物。

(2)打印版提交说明:

a 不可随意更改模板样式。

b 字体:中文为宋体,大小为10号字,英文为Time New Roman,大小为10号

字。

c 行间距:单倍行距。

(3)提交截止时间:2011年11月17日16:00。

三、 实验项目

【分治策略】

1. 采用分治策略算法实现棋盘覆盖问题的求解;

2. 运用冒泡排序算法、合并排序算法、快速排序算法实现对给定数字序列的排序。

【动态规划】

1. 运用动态规划算法求解矩阵连乘问题; 2. 运用动态规划算法求解最长公共子序列问题; 3. 运用动态规划算法求解最大子段和问题; 4.运用动态规划算法求解0-1背包问题。

【贪心算法】

1. 运用贪心算法求解找零钱问题。

【回溯算法】

1. 运用回溯算法求解0-1背包问题; 2. 运用回溯算法求解4城市旅行商问题; 3. 运用回溯算法求解N后问题。

【分支限界算法】

1. 运用分支限界算法求解0-1背包问题; 2. 运用分支限界算法求解4城市旅行商问题。

【其他搜索算法】

1. 运用深度优先搜索算法求解马走棋盘问题; 2. 运用A*算法求解九宫问题。

四、 实验过程

【分治策略】

1题目分析和算法构造

在此论证算法设计中的一些必要的设计依据。

将棋盘平分四部分,一直分,知道含有特殊方格,看特殊方格在那一部分中,在延边用L型骨牌覆盖。 2算法实现

程序源代码(请写入必要的注释)。 棋盘

#include #include using namespace std;

/*****************************************************

* 参数含义:

* tr--当前棋盘左上角的行号

* tc--当前棋盘左上角的列号

* dr--当前特殊方格所在的行号

* dc--当前特殊方格所在的列号

*****************************************************/

int Board[100][100];//用来存放棋盘元素的数组 int tile=1; //L型骨牌的投放序号

void ChessBoard(int tr, int tc, int dr, int dc, int size) {

if(size==1){ //棋盘方格大小为,说明递归到最里层 return; }

int t=tile++; //每次递增 int s=size/2; //分割棋盘

if(dr

else{ //不在,将该子棋盘右下角的方块视为特殊方块 Board[tr+s-1][tc+s-1]=t;

ChessBoard(tr, tc, tr+s-1, tc+s-1, s); }

if(dr=tc+s){ //检查特殊方块是否在右上角子棋盘中 ChessBoard(tr, tc+s, dr, dc, s); }

else{ //不在,将该子棋盘左下角的方块视为特殊方块 Board[tr+s-1][tc+s]=t;

ChessBoard(tr, tc+s, tr+s-1, tc+s, s); }

if(dr>=tr+s && dc

else{ //不在,将该子棋盘右上角的方块视为特殊方块 Board[tr+s][tc+s-1]=t;

ChessBoard(tr+s, tc, tr+s, tc+s-1, s); }

if(dr>=tr+s && dc>=tc+s){ //检查特殊方块是否在右下角子棋盘中 ChessBoard(tr+s, tc+s, dr, dc, s); }

else{ //不在,将该子棋盘左上角的方块视为特殊方块 Board[tr+s][tc+s]=t;

ChessBoard(tr+s, tc+s, tr+s, tc+s, s); } }

void main() {

int n;

int size;//棋盘大小

cout<<\请输入一个数字n,将为您创建的n次方大小的棋盘:\ cin>>n; int x,y;

size=(int)pow(2.0,(int)n); cout << \输入特殊方格的横坐标:\ cin >> x;

cout << \输入特殊方格的纵坐标:\ cin >> y; cout << endl;

ChessBoard(0,0,x,y,size);

cout << \程序运行结果如下所示:\ for(int i=0;i

cout << Board[i][j] << \ }

cout << endl; }

cout << endl; system(\}

3.运行结果

4经验归纳

棋盘覆盖的是基本思想基于分治策略,即是将棋盘平分四部分 1. 题目分析和算法构造

在此论证算法设计中的一些必要的设计依据。

N个数字来排队;两两相比小靠前;外层n-1;内层n-i-1。 2. 算法实现

程序源代码(请写入必要的注释)。

《算法设计与分析》实验二09770106刘东辉.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c59a105yj546m3qp9xkwe9ersa9pruq00xb2_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top