实验二贪心算法 最少活动会场安排问题

发布 2021-08-19 20:45:28 阅读 4287

中原工学院计算机学院。

实验报告。实验二最少活动会场安排问题。

一、实验目的。

1.掌握贪心算法的基本概念和两个基本要素。

2.熟练掌握贪心算法解决问题的基本步骤。

3.学会利用贪心算法解决实际问题。

二、实验内容

问题描述:题目一:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法来进行安排,试编程实现。

题目二:一辆汽车加满油后,可行使n千米。旅途中有若干个加油站。若要使沿途加油次数最少,设计一个有效算法,指出应在哪些加油站停靠加油。

数据输入:个人设定,由键盘输入。

要求: 上述题目任选一做。上机前,完成程序**的编写。

独立完成实验及实验报告。

三、实验步骤。

、数据结构与核心算法的设计描述。

提示:题目一:参考教材活动安排问题;有关队列操作参考数据结构。

void greedyselector(int n, int *s, int *f, int *a)

else a[i] =false;

、函数调用及主函数设计。

可用函数的调用关系图说明)

程序调试及运行结果分析。

实验总结。

在做本实验之前,自己看了课本上所列举的贪心法解活动安排问题的**,**很简单,很容易理解,于是就按课本的**实现。通过几个测试用例测试发现结果不对,后来发现自己忘了进行贪心法的一个前提条件,事先没有按各个活动结束时间对所有活动进行非递减排序,所以才会导致结果错误。经过修正后,自己真正理解了贪心法解活动安排问题的原理。

四、主要算法流程图及程序清单。

1、主要算法流程图:

2、程序清单

(程序过长,可附主要部分)

#include ""

#include<>

#include<>

#include

#define n 50

#define ture 1

#define false 0

int s[n];/开始时间*/

int f[n];/结束时间*/

int a[n];/用a存储所有的*/

void greedyselector(int n, int *s, int *f, int *a);

int partition(int *b, int *a, int p, int r)

int k, m, y, i = p, j = r + 1;

int x = a[p]; y = b[p];

while (1)

a[p] =a[j];

b[p] =b[j];

a[j] =x;

b[j] =y;

return j;

void quicksort(int *b, int *a, int p, int r)

int q; if (p

//产生中间数

int main()

int n = 0, i;

while (n <=0 ||n>50)

printf("请分别输入开始时间s[i]和结束时间f[i]:");

for (i = 1; i <=n; i++)

quicksort(s, f, 1, n); 按结束时间非减序排列

printf("按结束时间非减序排列如下:");输出排序结果*/

printf(" 序号\t开始时间结束时间");

printfn");for (i = 1; i <=n; i++)

printf(" d\t %d\t %d", i, s[i], f[i]);

printfn");

greedyselector(n, s, f, a);/贪心算法实现活动安排

printf("安排的活动序号依次为:")

for (i = 1; i <=n; i++)

printf("");

system("pause");

return 0;

//快速排序

/产生中间数

/贪心算法实现活动安排

void greedyselector(int n, int *s, int *f, int *a)

else a[i] =false;

贪心算法的初步认识

在众多的计算机解题策略中,贪心策略可以算得上是最接近人们日常思维的一种解题策略,正基于此,贪心策略在各级各类信息学竞赛 尤其在对npc类问题的求解中发挥着越来越重要的作用。7.1 贪心策略的定义 贪心策略是 指从问题的初始状态出发,通过若干次的贪心选择而得出最优值 或较优解 的一种解题方法。其实,从...

二年级珠心算说课稿

二年级珠心算 两位数三行加减法 说课稿。王盼盼。现在学生已经是二年级下学期了,学习了一年多的珠算,学生们基本上已经学会了珠算加减法的计算过程和拨珠方法。珠心算的学习主要就是让学生学会加减法的八个口诀,通过口诀来拨珠计算,在反复的练习和训练来巩固和记忆,使学生可以在掌握方法的基础上快速的计算出各种加减...

二年级珠心算教案

嫩江县第三小学。二年级珠心算教学计划。充分发挥算盘这一中华民族古老算具的作用,促进儿童左右脑的和谐发展,发展智力,培养特长,促进学生在其他学科学习中的迁移。一。教学目标。1.进一步激发学生学习珠心算的兴趣。2.培养学生动手动脑的能力。3.进一步巩固乘法的运算能力。4.学会一位乘多位的方法。二 教学安...