算法贪心算法----活动时间安排

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个开始时间和结束时间,然后按结束时间的升序输出排序,最后输出最大相容子集。

【算法分析】

【实验总结】

相关文档
最新文档