优化了排班的分配算法

This commit is contained in:
2024-12-30 07:23:58 +08:00
parent 4acd663ce8
commit 9516ec4c20

View File

@@ -72,26 +72,27 @@ func generateTable() (*[7][]string, error) {
}
}
//分配剩下的所有女生到女生片区
for c, i := range female {
if i.Arranged != true {
table[c%4] = append(table[c%4], i.Name)
//为剩下的片区分配负责人
for _, i := range male {
if i.Access < model.FRESH {
table[fewest(table)] = append(table[fewest(table)], i.Name)
i.Arranged = true
}
}
//为男生分配负责人
for c, i := range male {
if i.Access < model.FRESH {
table[(c%3)+4] = append(table[(c%3)+4], i.Name)
//分配剩下的所有女生到女生片区
for _, i := range female {
if i.Arranged != true {
table[fewestF(table)] = append(table[fewestF(table)], i.Name)
i.Arranged = true
}
}
//分配剩下的所有男生
for c, i := range male {
for _, i := range male {
if i.Arranged == false {
table[c%7] = append(table[c%7], i.Name)
table[fewest(table)] = append(table[fewest(table)], i.Name)
}
}
fmt.Printf("today:%v\n", today)
@@ -117,3 +118,25 @@ func readTableData(m *[]*model.Member) error {
}
return nil
}
// 找出人数最少的片区
func fewest(a [7][]string) int {
b := min(len(a[0]), len(a[1]), len(a[2]), len(a[3]), len(a[4]), len(a[5]), len(a[6]))
for i := range len(a) {
if b == len(a[i]) {
return i
}
}
return -1 //error
}
// 找出人数最少的女生片区
func fewestF(a [7][]string) int {
b := min(len(a[0]), len(a[1]), len(a[2]), len(a[3]))
for i := range len(a) - 3 {
if b == len(a[i]) {
return i
}
}
return -1 //error
}