自动排班系统1.0

附详细注释
#include <iostream>
#include <cstdio>
#include <queue>
#include <string.h> 
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#define arraySize 200  //中心干部不超过100,每周班数最多50
#define inf 1000000000//无穷大
int capacity[arraySize][arraySize], flow[arraySize][arraySize], max_flow[arraySize], pre[arraySize];
//capacity存储点之间最大流量,flow存储点之间当前已经流过的流量 
//max_flow存储每次遍历过程中的值,pre记录查找过程中每个节点的前一节点,用于后续更新
int reflect[100];
//用于标记干部值哪班,初始值为0,代表还未分配值班时间
int period_info[60][10];
//每班由哪些人来值
int member_amount, period_amount, tmp, start_node, end_node;
//干部数量,班的数量,临时变量,超级源点,超级汇点


//干部对象,No-干部对应序号,name-姓名,period_amount可值班数,store_period存储可以值的班对应的序号,干部不超过100人
struct member
{
	int No;
	string name;
	int period_amount;
	vector <int> store_period;
}store_member[100];
//贪心阶段干部的排序,按照空余时间段少的先安排的策略排序
bool cmp(member a, member b)
{
	return a.period_amount < b.period_amount;
}

//初始化
void Initialize()
{
	//初始化干部值班对应关系
	memset(reflect, 0, sizeof(reflect));
	//初始化班存储的干部信息
	memset(period_info, 0, sizeof(period_info));
}

//核心算法,通过设置1个超级源点和1个超级汇点,并把从源点流出和流入源点的值设置为1,从而确保每一班都有一个人值
int Edmonds_Karp(int source, int target)//源点,汇点 
{
	//初始化 
	queue <int> store;
	int cur;
	//ans最大流 此处用于返回看能否保证每一班一个人
	int ans=0;
	//cur当前节点 
	//flow存储的是两个点之间的流量,用于后
  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值