贪心算法活动时间安排_第1页
贪心算法活动时间安排_第2页
贪心算法活动时间安排_第3页
贪心算法活动时间安排_第4页
贪心算法活动时间安排_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二:贪心算法【实验目的】深入理解贪心法的算法思想,应用贪心算法解决实际的算法问题。【实验性质】验证性实验。【实验要求】有n个活动的集合A=1,2,n,其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。求解安排尽量多项活动在该场地进行,即求A的最大相容子集。【程序代码】# include <stdio.h>void input(int a 3); /输入活动时间void sort (int a 3); /排序 void output1 (int a 3); /排序的结果输出int greed (int a 3, int arr503, int

2、 m); /判断记录被选中的活动时间 void output2 (int a503, int y,int m); /输出最大的的活动时间int yi=0;int n;int main ()int array503; int arr50503=0;int z, y, m, b12=0;printf ("活动总数量n(n<50)! nn");scanf ("%d", &n);input (array);sort (array);printf ("n");output1 (array);printf ("n"

3、;);for (m=0; m<n; m+)bm = greed (array, arr, m);y = 0;for (m=0; m<n; m+)if (y < bm)y = bm;z = m;printf ("安排活动时间的最大相容子集:n");output2 (arr, y,z);return 0;void input(int a 3) int i, j;for (i=0; i<n; i+)ai0=i+1;printf ("请输入第%d个活动的开始时间和结束时间:", i+1);for(j=1; j<3; j+)scanf

4、 ("%d", &aij);void sort (int a 3) int i, j, k, t;for (i=0; i<n-1; i+)for (j=0; j<n-1-i; j+)for (k=0; k<3; k+)if (aj2 > aj+12)t = ajk;ajk = aj+1k;aj+1k = t;void output1 (int a 3) int i, j;printf ("按结束时间的升序排列如下:n");for (i=0; i<n; i+) printf ("原来序号%d的开始时间和结束时

5、间 :", ai0);for (j=1; j<3; j+)printf (" %d", aij);printf ("n");int greed (int a 3, int arr503, int m) int i, j, k, y=1;k = am2;/for (i=0; i<3; i+)arryi0i = ami;/for (i=m; i<n; i+)if (k <= ai1)k = ai2;for (j=0; j<3; j+)arryiyj = aij;y+;yi+;return y;void output2

6、(int a503, int y,int m) int i, j;for (i=0; i<y; i+)printf ("选中了原来序号为第%d活动,他的开始结束时间分别为:", ami0);for (j=1; j<3; j+)printf ("%d ", amij );printf ("n");法二#include <stdio.h>#define active_num 11 /活动数#define true 1        &#

7、160; /记录被选的活动#define false 0         /未被选择的活动int greedySelector(int s,int f,int b)/  算法    b0 = true;    int j = 0;    int i = 1;    int count = 1;    for(

8、i = 1;i <=active_num; i+ )            if(si > fj)                    bi = true;         &

9、#160;  j = i;            count+;                else        bi = false;      

10、60; printf("active number is %dn",count);    for(i=0;i<active_num;i+)            if(bi = 1)            printf("%d ",i+1);  

11、;      return 0;int main()         int i;        int start_timeactive_num;        int finish_timeactive_num;      &

12、#160; int booleanactive_num;         printf("please input the start timen");        for(i = 0; i < active_num; i+)              

13、;  scanf("%d",&start_timei);         printf("please input the finish timen");        for(i = 0; i < active_num; i+)                

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论