算法贪心算法----活动时间安排
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
算法设计与分析
实验报告
实验项目实验二实验类别验证性学生姓名王龙学生学号7
完成日期2016-4-15
指导教师刘振章
实验成绩评阅日期
评阅教师刘振章
实验二:贪心算法
【实验目的】
深入理解贪心法的算法思想,应用贪心算法解决实际的算法问题。
【实验性质】
验证性实验。
【实验要求】
有n个活动的集合A={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。求解安排尽量多项活动在该场地进行,即求A的最大相容子集。
设待安排的11个活动的开始时间和结束时间按结束时间的升序排列如下:
将此表数据作为实现该算法的测试数据。
【算法思想及处理过程】
【程序代码】
printf ("\n");
for (m=0; m<11; m++)
b[m] = greed (array, arr, m);
y = 0;
for (m=0; m<11; m++)
if (y < b[m])
{
y = b[m];
z = m;
}
printf ("安排活动时间的最大相容子集:\n");
output2 (arr, y,z);
return 0;
}
void input(int a[ ][3])
{
int i, j;
printf ("请按提示操作!!! \n\n");
for (i=0; i<11; i++)
{
a[i][0]=i+1;
printf ("请输入第%d个活动的开始时间和结束时间:", i+1);
for(j=1; j<3; j++)
scanf ("%d", &a[i][j]);
}
}
void sort (int a[ ][3])
{
int i, j, k, t;
for (i=0; i<10; i++)
for (j=0; j<10-i; j++)
for (k=0; k<3; k++)
if (a[j][2] > a[j+1][2])
{
t = a[j][k];
a[j][k] = a[j+1][k];
a[j+1][k] = t;
}
}
void output1 (int a[ ][3])
{
int i, j;
printf ("按结束时间的升序排列如下:\n");
for (i=0; i<11; i++)
{
printf ("原来序号%d的开始时间和结束时间:", a[i][0]);
for (j=1; j<3; j++)
printf (" %d", a[i][j]);
printf ("\n");
}
}
int greed (int a[ ][3], int arr[][11][3], int m) {
int i, j, k, y=1;
k = a[m][2];//
for (i=0; i<3; i++)
arr[yi][0][i] = a[m][i];//
for (i=m; i<11; i++)
{
if (k <= a[i][1])
{
k = a[i][2];
for (j=0; j<3; j++)
arr[yi][y][j] = a[i][j];
y++;
}
}
yi++;
return y;
}
void output2 (int a[][11][3], int y,int m)
{
【运行结果】
图说明:按照提示输入11个开始时间和结束时间,然后按结束时间的升序输出排序,最后输出最大相容子集。
【算法分析】
【实验总结】