c语言-算法课程设计-会场安排
来源:互联网 发布:sql数据库置疑怎么解决 编辑:程序博客网 时间:2024/06/07 21:50
会场安排
**
问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排.(这个问题实际上是著名的图着色问题.若将每一个活动作为图的一个顶点,不相容活动间用边相连.使相连顶点着不同颜色的最少着色数,相应于要找最少会场数.)
**
程序内容包含
1.可自定义活动个数
2.可以使用文件和窗口两种方法对活动时间进行录入
2.对时间进行合法判断时间大于0小于24
运行结果:
源代码:
meeting.h
#ifndef __MEETING_H__#define __MEETING_H__#include <iostream>#include <Windows.h>using namespace std;#define MAX 100#define DataType inttypedef struct Acticity { DataType t; bool isST;}Acticity;void Init(Acticity ac[MAX],int anum);void InitFile(Acticity ac[MAX],int anum);void Sort(Acticity ac[MAX],int anum);int FindNice(Acticity ac[MAX],int anum);#endif
meeting.cpp
#define _CRT_SECURE_NO_WARNINGS 1#include "meeting.h"void Init(Acticity ac[MAX],int anum){ int i = 0; int j = 0; printf("请输入活动开始时间和结束时间以空格隔开(0-24h):\n"); for (i=0;i<anum*2;i++) { if (i%2==0) { cin>>ac[i].t; ac[i].isST = true; } else { cin>>ac[i].t; ac[i].isST = false; } } while(j<anum*2) { if ((ac[j].t>ac[j+1].t)||(ac[j].t<0)||(ac[j+1].t<0)||(ac[j].t>24)||(ac[j+1].t>24)) { printf("Time error\n"); printf("Check your time!\n"); exit(EXIT_FAILURE); } j=j+2; }}void InitFile(Acticity ac[MAX],int anum){ int i = 0; int j = 0; FILE *fp = fopen("input.txt","r"); if (fp==NULL) { perror("open file"); exit(EXIT_FAILURE); } for (i=0;i<2*anum;i++) { fscanf(fp,"%d",&ac[i].t); } fclose(fp); for (i=0;i<anum*2;i++) { if (i%2==0) { ac[i].isST = true; } else { ac[i].isST = false; } } while(j<anum*2) { if ((ac[j].t>ac[j+1].t)||(ac[j].t<0)||(ac[j+1].t<0)||(ac[j].t>24)||(ac[j+1].t>24)) { printf("Time error\n"); printf("Check your time!\n"); exit(EXIT_FAILURE); } j=j+2; }}void Sort(Acticity ac[MAX],int anum){ DataType tmp; bool box; for (int i=0;i<anum*2;i++) { for (int j =i;j<anum*2;j++) { if (ac[j].t<ac[i].t) { tmp =ac[j].t; ac[j].t = ac[i].t; ac[i].t = tmp; box = ac[j].isST; ac[j].isST = ac[i].isST; ac[i].isST = box; } } } /*for (int i = 0;i<2*anum;i++) { cout<<ac[i].t<<" "<<ac[i].isST<<endl; }*///输出结果}int FindNice(Acticity ac[MAX],int anum){ int count[MAX]; count[0] = 1; for (int i = 1;i<anum*2;i++) { if (ac[i].isST == true) { count[i] = count[i-1]+1; } else { count[i] = count[i-1]-1; } } int maxcount = count[0]; for (int i = 1;i<anum*2;i++) { if (count[i]>maxcount) { maxcount = count[i]; } } return maxcount;}
test.cpp
#define _CRT_SECURE_NO_WARNINGS 1#include "meeting.h"void menu(Acticity ac[MAX]){ int anum = 0; while (1) { int maxcount = 0; int input = 0; int i = 0; printf("*******************************\n"); printf("******* 1.输入活动数目 *******\n"); printf("******* 2.窗口输入 *******\n"); printf("******* 3.文件输入 *******\n"); printf("******* 4.查找最优会场数*******\n"); printf("******* 0. 退出 *******\n"); printf("*******************************\n"); printf("请选择:"); cin>>input; switch (input) { case 2: Init(ac,anum); break; case 3: printf("正在读取文件!\n"); for (i=0;i<31;i++) { printf("*"); if (i==30) { printf("\n"); } Sleep(100); } printf("读取完成!\n"); InitFile(ac,anum); break; case 4: Sort(ac,anum); maxcount = FindNice(ac,anum); cout<<"最好的会场数:"; cout<<maxcount<<endl; break; case 1: printf("请输入活动个数:"); cin>>anum; break; case 0: return; default: printf("选择有错\n"); break; } }}int main (){ Acticity ac[MAX]; menu(ac); return 0;}
阅读全文
0 0
- c语言-算法课程设计-会场安排
- 【C语言】 会场安排问题
- 贪心算法-会场安排
- 算法 会场安排问题
- C语言课程设计具体安排说明
- C语言课程设计具体安排说明
- C语言 南阳理工ACM 14 会场安排问题
- 【贪心算法】会场安排问题
- 会场安排问题 贪心算法
- 会场安排问题贪心算法
- 会场安排问题(贪心算法)
- 贪心算法解决会场安排问题
- 会场安排问题(贪心算法)
- 贪心算法之nyoj会场安排问题
- NTOJ-14-会场安排问题(贪心算法)
- 贪心算法-会场安排-最大相容
- 会场安排问题(贪心算法)
- 贪心算法作业之会场安排问题
- Tarjan 算法
- dw.find,如果参数endrow 大于 startrow,会出现倒序查询
- javascript本地对象,内置对象、宿主对象
- 241. Different Ways to Add Parentheses
- [自媒体]为什么你做自媒体不赚钱?
- c语言-算法课程设计-会场安排
- EAP 设置TimeOut 原因
- SSH项目整合实现Ajax注册用户验证
- JAVA初识
- 算法笔记--宽度优先搜索
- LeetCode题解–226. Invert Binary Tree
- 【HDU4430】【ZOJ3656】Bit Magic 2-SAT
- 数组与字符串方法
- 计算机网络基础知识