太原理工大学算法设计与分析实验报告资料.docx

上传人:b****3 文档编号:26430133 上传时间:2023-06-19 格式:DOCX 页数:16 大小:438.75KB
下载 相关 举报
太原理工大学算法设计与分析实验报告资料.docx_第1页
第1页 / 共16页
太原理工大学算法设计与分析实验报告资料.docx_第2页
第2页 / 共16页
太原理工大学算法设计与分析实验报告资料.docx_第3页
第3页 / 共16页
太原理工大学算法设计与分析实验报告资料.docx_第4页
第4页 / 共16页
太原理工大学算法设计与分析实验报告资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

太原理工大学算法设计与分析实验报告资料.docx

《太原理工大学算法设计与分析实验报告资料.docx》由会员分享,可在线阅读,更多相关《太原理工大学算法设计与分析实验报告资料.docx(16页珍藏版)》请在冰豆网上搜索。

太原理工大学算法设计与分析实验报告资料.docx

太原理工大学算法设计与分析实验报告资料

课程名称:

本科实验报告

分算法设计与分析

实验项目:

分治法合并排序

贪心法作业调度

动态规划法求多段图问题回溯法求n皇后问题

实验地点:

行勉楼B209

专业班级:

软件14**班

学生姓名:

指导教师:

学号:

201400****

******

******

2016年4月10日

1

 

一、实验目的

1.

2.

3.

4.

掌握合并排序的基本思想掌握合并排序的实现方法学会分析算法的时间复杂度学会用分治法解决实际问题

4、算法描述和程序代码#include

#include

#include

usingnamespacestd;

#definerandom(x)(rand()%x);

inta[10];//合并排序函数。

voidMerge(intleft,intmid,intright){intt[11];

inti=left,j=mid+1,k=0;

while((i<=mid)&&(j<=right)){

if(a[i]<=a[j])

t[k++]=a[i++];

else

t[k++]=a[j++];

}

while(i<=mid)

t[k++]=a[i++];

while(j<=right)

t[k++]=a[j++];

for(i=0,k=left;k<=right;)a[k++]=t[i++];

}//分划函数,并且调用合并函数。

voidMergeSort(intleft,intright){

if(left

intmid=((left+right)/2);MergeSort(left,mid);

2

MergeSort(mid+1,right);

Merge(left,mid,right);//调用合并函数。

}

}

voidmain(){

inti;

cout<<"排序前的数组为:

";

for(i=0;i<10;i++){

a[i]=random(100);//调用random函数,产生10个0-100的随机数。

cout<

}

cout<

MergeSort(0,9);

cout<<"排序后的数组为:

";

for(i=0;i<10;i++){

cout<

}

getchar();

}

3

一、实验目的

1.

2.

3.

4.

掌握贪心算法的基本思想

掌握贪心算法的典型问题求解

进一步多级调度的基本思想和算法设计方法学会用贪心法分析和解决实际问题

四、算法描述和程序代码

#include

usingnamespacestd;

constintWork[8]={35,30,25,20,15,10,5,1};//所有作业按收益从大到小排序constintmaxTime[8]={4,2,4,5,6,4,5,7};

classHomeWork{

private:

intres[8];

boolflag[8];

intmaxReap;

public:

voiddealWith(){

//遍历所有作业:

inti;

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

intTime=maxTime[i]-1;

if(!

flag[Time]){

//如果最大期限那一天还未安排作业,则将当前作业安排在所允许的最大

期限那天

res[Time]=Work[i];

flag[Time]=true;

}

else{

//如果当前作业所允许的最大期限那一天已经安排的其他作业,就向前搜

索空位,将该作业安排进去

for(intj=Time-1;j>=0;j--)

4

if(!

flag[j]){

res[j]=Work[i];

flag[j]=true;

break;

}

}

}

cout<<"作业完成顺序为:

";

for(i=0;i<7;i++){

cout<

}

cout<

cout<

";intj;

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

maxReap+=res[j];

cout<

}

HomeWork(){

inti;

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

flag[i]=false;

maxReap=0;

}

};

voidmain(){

HomeWorka=HomeWork();

a.dealWith();

getchar();

}

5

一、实验目的

1.

2.

3.

4.

掌握动态规划算法的基本思想掌握多段图的动态规划算法

选择邻接表或邻接矩阵方式来存储图分析算法求解的复杂度

四、算法描述和程序代码

#include

usingnamespacestd;

struct{

intr[50];

intlength;

}SqList,L;

voidMSort(intSR[],intTR1[],ints,intt);

6

voidMerge(intsR[],intTR[],inti,intmid,intn);

voidmain()

{

cout<<"请输入待排序的数目:

";

cin>>L.length;

cout<<"请输入待排序的数:

";

for(intc=0;c

cin>>L.r[c];

cout<<"合并排序前的数组为:

";

for(intd=0;d

cout<

cout<

MSort(L.r,L.r,0,L.length-1);

cout<<"合并排序后的数组为:

";

for(inti3=0;i3

cout<

cout<

}

voidMSort(intSR[],intTR1[],ints,intt)//两路合并排序

{

intmid;

intTR2[100];

if(s==t)

TR1[s]=SR[s];

else//若序列的长度超过1,则划分为两个子序列

{

mid=(s+t)/2;//将待排序的序列一分为二

MSort(SR,TR2,s,mid);//对左子序列排序

MSort(SR,TR2,mid+1,t);//对右子序列排序

Merge(TR2,TR1,s,mid,t);//将两个有序子序列合并成一个有序序列

}

}

voidMerge(intSR[],intTR[],inti,intmid,intn)//将两个有序序列合并成一个有序序列{

intj,k;

for(j=mid+1,k=i;i<=mid&&j<=n;++k)

{

if(SR[i]<=SR[j])

TR[k]=SR[i++];

else

TR[k]=SR[j++];

}

if(i<=mid)//如果左子序列还有元素未输出,则将左子序列剩余元素依次输出

{

7

intk1=k;

for(inti1=i;i1<=mid;i1++)

{

TR[k1]=SR[i1];

k1++;

}

}

if(j<=n)//如果右子序列还有元素未输出,则将右子序列剩余元素依次输出{

intk2=k;

for(intj2=j;j2<=n;j2++)

{

TR[k2]=SR[j2];

k2++;

}

}

}

8

 

四、算法描述和程序代码#include

usingnamespacestd;

#defineN8

intres[100][8];

intcountRes=0;

boolPlace(intk,inti,int*x){

for(intj=0;j

if(x[j]==i||abs(x[j]-i)==abs(j-k))returnfalse;

returntrue;

}

voidNQueen(intk,intn,int*x){

for(inti=0;i

if(Place(k,i,x)){

x[k]=i;

if(k==n-1){

for(i=0;i

}

countRes++;

cout<

}else{

NQueen(k+1,n,x);

}

}

}

9

voidNQueen(intn,int*x){

NQueen(0,n,x);

}

intmain(){

intx[N];

for(inti=0;i

*(x+i)=-10;

NQueen(N,x);

cout<

cout<<"是否显示图示?

(Y/N)"<>show;

if(show=='Y'||show=='y'){

for(intn=0;n

"<

for(intj=0;j

if(res[n][i]==j)

cout<<"Q"<<"\t";

else

cout<<"*"<<"\t";

}

cout<

}

}

}

return0;

}

10

11

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1