天天加油 - 助您成才
挑战2004年高校bbs程序大赛算法设计第一名----打水问题
您正在看的Windows XP是:挑战2004年高校bbs程序大赛算法设计第一名----打水问题。

挑战2004年高校bbs程序大赛算法设计第一名----打水问题

我的程序绝对比他的优。。。。

/* 打水问题的最优化算法 */

/* 算法设计:最小打水时间的设计;一共有N个人打水,R个水源头,所以他们的打水时间的最小用时,不会低于他们的每个人所用时间的最大值---max(T1,T2,------Tn)。*/

/*第一种情况,*/

/*当N<=R时,N个人每个人同时所用R个水龙头,他们所用最小的打水时间为max(T1,T2,------Tn)。*/

/* 第二种情况,*/

/*当N>R时,基本思想为,用时最大的人先打水原则。所以先把打水的人安从大到小的顺序,*/

/* 让用时多的人先用水龙头,把N个人中,用时在前R的人排成一排,*/

/*成为一组所用水龙头的人,然后在剩余的人中,把用时最大的人排在前一排用时最小的人的后面。然后计算每个水龙头的总共用时数,*/

/* 然后把剩余的人中用时最大的人排在水龙头*/

/* 总共用时数最小的那列,以此排列,直到把人排完。*/

/* 算法的数学模型。 */

/* 已知:一共有N个人打水,R个水源头,N个人的打水时间为:T1,T2,------Tn。*/

/* 把N个人的用时排序后,设为:S1,S2,-------Sn,S1=max(T1,T2,------Tn)表示用时最大的人,Si表示第i个最大用时者。*/

/* 第一排的人为S1,S2,------SR,*/

/* 剩余人数为N-R,第一排用时的最大数为S1,最小者为SR,在SR后面排SR+1,( SR+1为剩余人中用时最大者 )。然后计算各个水龙头的总共用时数,*/

/* 第一水龙头的总共用时量为S1,第i个水龙头的总共用时量为Si,最后一个水龙头的总共用时量为SR+SR+1)。找出最小用时的水龙头,把SR+2排在该列,*/

/* 如此循环,假如,在某次排列后的情况为:第一列的总共用时量为A1,第I列的总共用时量为Ai,第R列的总共用时量为AR,*/

/*水龙头总共用时量最小者为Aj,及Aj=min(A1,A2,----,AR)。*/

/* 现在,剩余的人中用时最大者的用时量为B,把B加到Aj那列,此时该列的总共用时量为:B+Aj。因为 */

/* Aj<=Ai,( i!=j , 1<=i,j<=R )。 所以 Aj+B<=Ai+B 。 */

/* 编程 */

#include <stdio.h>

#include <malloc.h>

#define list_node_size sizeof(struct list_task)

#define tree_node_size sizeof(struct tree_node)

struct list_task

{

int tasks;

struct list_task * next,* up;

};

struct tree_node

{

int tasks;

struct tree_node * right_child,* left_child;

};

struct list_task * input_task(int n)

{

int i;

struct list_task *head,*p1,*p2;

p1=(struct list_task *)malloc(list_node_size);

printf("please input size of task1:");

scanf("%d",&p1->tasks);

head=p2=p1;

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

{

p1=(struct list_task *)malloc(list_node_size);

printf("please input size of task%d:",i);

scanf("%d",&p1->tasks);

p2->next=p1;

p1->up=p2;

p2=p1;

}

p2->next=NULL;

head->up=NULL;

return head;

}

struct list_task * sort_list(struct list_task * head)

{

int lable;

struct list_task * p1,*p2;

p1=p2=head;

p1=p2->next;

while(p1)

{

if(p1->tasks<p2->tasks)

{

lable=p1->tasks;

p1->tasks=p2->tasks;

p2=p2->up;

while(p2&&lable<p2->tasks)

{

p2->next->tasks=p2->tasks;

p2=p2->up;

}

if(p2)p2->next->tasks=lable;

else head->tasks=lable;

}

p2=p1;

p1=p1->next;

}

head->up=NULL;

return p2;

}

int main(int argc, char **argv)

{

struct list_task *p;

struct tree_node *min_head,*head,*min_p1,*p1,*

  • 上一篇教程:
  • 下一篇教程:
  • 排行

    1. 以管理员身份运行“计算机管理”
    2. 文件关联打开方式随你改
    3. 让XP镜像文件小一点儿
    4. 把Windows XP系统界面变成苹果MA
    5. 打造与众不同的“我的电脑”
    6. Windows98安装文件压缩包的释放
    7. VMware Workstation 3.0 综述(四
    8. “细心呵护”Windows日志文件
    9. DOS环境变量“全家福”
    10. Windows中实现定时自动运行程序
    11. F1~F12在Windows系统中的作用
    12. 网友必备知识 用Fdisk进行分区和
    13. 如何把系统主题集成到Win XP安装
    14. 在一块硬盘上安装XP+Mac+Vista+L
    15. 番茄花园 WinXP安装盘集成技术分
    16. Windows系统非法操作详解
    1. 程序进程:gmt.exe
    2. 快速调用DOS窗口
    3. Windows98安装文件压缩包的释放
    4. VMware Workstation 3.0 综述(四
    5. 对“缓存”的全面理解和优化
    6. 在Win2000 下装 98 一例
    7. Windows“自动关机”总动员
    8. 用Windows工具揪出隐藏的“QQ尾巴
    9. 小心使用双刃剑—Windows98下慎用
    10. “细心呵护”Windows日志文件
    11. 64个Windows技巧与窍门大放送(三
    12. Windows操作系统菜鸟秘技
    13. 详解Windows非法操作的具体含义
    14. 详解Windows非法操作的具体含义(
    15. DOS下对注册表的编程
    16. DOS环境变量“全家福”
    1. Windows98安装文件压缩包的释放
    2. VMware Workstation 3.0 综述(四
    3. “细心呵护”Windows日志文件
    4. 详解Windows非法操作的具体含义
    5. DOS环境变量“全家福”
    6. Windows中实现定时自动运行程序
    7. F1~F12在Windows系统中的作用
    8. 网友必备知识 用Fdisk进行分区和
    9. 如何把系统主题集成到Win XP安装
    10. 在一块硬盘上安装XP+Mac+Vista+L
    11. 番茄花园 WinXP安装盘集成技术分
    12. 有它再不怕重装XP-万能镜像指南
    13. 64位WinXP的安装及与32位的差别
    14. 玩转XP系统精选WindowsXP技巧10则
    15. 解决WindowsXP网络邻居共享的问题
    16. 解析WindowsXP操作系统中的帐户和

    最近更新

  • 推荐阅读
  • Windows XP《挑战2004年高校bbs程序大赛算法设计第一名----打水问题》挑战2004年高校bbs程序大赛算法设计第一名----打水问题
    关于我们 | 版权申明 | 广告服务 | 友情链接 | 网站地图 | 使用帮助 | ©2006-2008 TTADD.COM