}
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;ccin>>L.r[c];
cout<<"合并排序前的数组为:
";
for(intd=0;dcout<cout<MSort(L.r,L.r,0,L.length-1);
cout<<"合并排序后的数组为:
";
for(inti3=0;i3cout<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;jif(x[j]==i||abs(x[j]-i)==abs(j-k))returnfalse;
returntrue;
}
voidNQueen(intk,intn,int*x){
for(inti=0;iif(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;jif(res[n][i]==j)
cout<<"Q"<<"\t";
else
cout<<"*"<<"\t";
}
cout<}
}
}
return0;
}
10
11