📄 program.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Xml;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace PaiKe
{
class Program
{
static void Main(string[] args)
{
PaiKe paike = new PaiKe();
paike.Test1();
Console.ReadLine();
}
}
class ClassUnit
{
static List<Course> CourseList = new List<Course>();
public const int WeekDay = 5;
public const int CourseCount = 6;
public int ID;
public int[] XuLie = new int[WeekDay * ClassUnit.CourseCount];
public ClassUnit(int id, int[] xulie)
{
ID = id;
XuLie = xulie;
}
}
[Serializable()]
class Course
{
static int Seed = 0;
public int ID;
public int ClassID;
public string TeacherName;
public int TeacherID;
public string Name;
public int Priority = 0;
public Course(int id, int techerid ,string name, string teacherName, int priority)
{
Seed++;
Name = name;
ID = id;
TeacherID = id;// techerid;
TeacherName = teacherName;
Priority = priority;
}
}
class CoursePriority
{
public static int[] Priority=new int[ClassUnit.CourseCount]{5,5,4,4,2,1};
}
class PaiKe
{
Random rnd = new Random();
ClassUnit tClassUnit;// = new ClassUnit(1);
List<ClassUnit> ClassList = new List<ClassUnit>();
List<Course> CourseList = new List<Course>();
//---------------惩罚值列表--------------
//冲突
const int ChongTu = 200;
//一天有2节相同的课
const int OneDayForTowCourse = 150;
//连续2天有2节相同课
const int TowDayForTowCourse = 40;
//课程优先级单位值
const int CoursePr = 15;
void Init()
{
int[] Tshuzu ;
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
1,1,1,1,1,2,
2,2,2,2,3,3,
3,3,3,4,4,4,
5,5,6,6,6,8,
8,9,9,7,7,10
};
tClassUnit = new ClassUnit(1, Tshuzu);
ClassList.Add(tClassUnit);
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
1,1,1,1,1,2,
2,2,2,2,3,3,
3,3,3,4,4,4,
5,5,6,6,6,8,
8,9,9,7,7,10
};
tClassUnit = new ClassUnit(1, Tshuzu);
ClassList.Add(tClassUnit);
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
11,11,11,11,11,12,
12,12,12,12,13,13,
13,13,13,14,14,14,
15,15,16,16,16,18,
18,19,19,17,17,20
};
tClassUnit = new ClassUnit(1, Tshuzu);
//ClassList.Add(tClassUnit);
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
21,21,21,21,21,21,
21,21,21,21,21,21,
21,21,21,21,21,21,
21,21,21,21,21,21,
21,21,21,21,21,21
};
tClassUnit = new ClassUnit(1, Tshuzu);
//ClassList.Add(tClassUnit);
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
21,21,21,21,21,22,
22,22,22,22,23,23,
23,23,23,24,24,24,
25,25,26,26,26,28,
28,29,29,27,27,30
};
tClassUnit = new ClassUnit(1, Tshuzu);
//ClassList.Add(tClassUnit);
Tshuzu = new int[ClassUnit.CourseCount * ClassUnit.WeekDay]
{
21,21,21,21,21,22,
22,22,22,22,23,23,
23,23,23,24,24,24,
25,25,26,26,26,28,
28,29,29,27,27,30
};
tClassUnit = new ClassUnit(1, Tshuzu);
//ClassList.Add(tClassUnit);
//tClassUnit = new ClassUnit(2, new int[ClassUnit.CourseCount * ClassUnit.WeekDay] { 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5 });
//ClassList.Add(tClassUnit);
//tClassUnit = new ClassUnit(3, new int[ClassUnit.CourseCount * ClassUnit.WeekDay] { 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15 });
//ClassList.Add(tClassUnit);
//tClassUnit = new ClassUnit(4, new int[ClassUnit.CourseCount * ClassUnit.WeekDay] { 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 15, 15 });
//ClassList.Add(tClassUnit);
////tClassUnit = new ClassUnit(2, new int[ClassUnit.CourseCount * ClassUnit.WeekDay] { 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5 });
////ClassList.Add(tClassUnit);
CourseList.Add(new Course(1, 1, "语文", "全伟", 5));
CourseList.Add(new Course(2, 2, "数学", "全伟", 5));
CourseList.Add(new Course(3, 3, "英语", "全伟", 4));
CourseList.Add(new Course(4, 4, "物理", "全伟", 2));
CourseList.Add(new Course(5, 5, "化学", "全伟", 2));
CourseList.Add(new Course(6, 6, "生物", "全伟", 2));
CourseList.Add(new Course(7, 7, "地理", "全伟", 2));
CourseList.Add(new Course(8, 8, "历史", "全伟", 2));
CourseList.Add(new Course(9, 9, "政治", "全伟", 2));
CourseList.Add(new Course(10, 10, "音乐", "全伟", 1));
CourseList.Add(new Course(11, 1, "语文", "全伟", 5));
CourseList.Add(new Course(12, 1, "数学", "全伟", 5));
CourseList.Add(new Course(13, 1, "英语", "全伟", 4));
CourseList.Add(new Course(14, 1, "物理", "全伟", 2));
CourseList.Add(new Course(15, 1, "化学", "全伟", 2));
CourseList.Add(new Course(16, 1, "生物", "全伟", 2));
CourseList.Add(new Course(17, 1, "地理", "全伟", 2));
CourseList.Add(new Course(18, 1, "历史", "全伟", 2));
CourseList.Add(new Course(19, 1, "政治", "全伟", 2));
CourseList.Add(new Course(20, 1, "音乐", "全伟", 1));
CourseList.Add(new Course(21, 1, "test", "全伟", 1));
/*
CourseList.Add(new Course(21, 1, "语文", "全伟", 5));
CourseList.Add(new Course(22, 1, "数学", "全伟", 5));
CourseList.Add(new Course(23, 1, "英语", "全伟", 4));
CourseList.Add(new Course(24, 1, "物理", "全伟", 2));
CourseList.Add(new Course(25, 1, "化学", "全伟", 2));
CourseList.Add(new Course(26, 1, "生物", "全伟", 2));
CourseList.Add(new Course(27, 1, "地理", "全伟", 2));
CourseList.Add(new Course(28, 1, "历史", "全伟", 2));
CourseList.Add(new Course(29, 1, "政治", "全伟", 2));
CourseList.Add(new Course(30, 1, "音乐", "全伟", 1));
*/
}
void Print(ClassUnit cu)
{
for (int i = 0; i < ClassUnit.WeekDay * ClassUnit.CourseCount; i++)
{
Console.Write(cu.XuLie[i].ToString() + " ");
if ((i + 1) % ClassUnit.CourseCount == 0)
{
Console.Write("\n");
}
}
}
void PrintDetail(ClassUnit cu)
{
Console.Write(" ");
for (int i = 0; i < ClassUnit.CourseCount; i++)
{
Console.Write("第{0}节 ", i + 1);
}
Console.Write("\n----------------------------------\n");
for (int i = 0; i < ClassUnit.WeekDay * ClassUnit.CourseCount; i++)
{
if ((i) % (ClassUnit.CourseCount) == 0)
{
Console.Write("周{0}: ", i / ClassUnit.CourseCount + 1);
}
Console.Write(CourseList[(cu.XuLie[i] - 1)].Name.ToString() + " ");
if ((i + 1) % ClassUnit.CourseCount == 0)
{
Console.Write("\n");
}
}
}
void assign(int[] c, int[] n)
{
for (int i = 0; i < c.Length; i++)
c[i] = n[i];
}
void CreateNext(int[] c, int[] n)
{
for (int i = 0; i < c.Length; i++)
n[i] = c[i];
int i1 = (int)(rnd.Next(ClassUnit.WeekDay * ClassUnit.CourseCount));
int i2 = (int)(rnd.Next(ClassUnit.WeekDay * ClassUnit.CourseCount));
int aux = n[i1];
n[i1] = n[i2];
n[i2] = aux;
}
int ComputeValue(int[] cu)
{
int Sum = 0;
for (int i = 0; i < ClassUnit.WeekDay; i++)
{
int row = i * ClassUnit.CourseCount;
for (int j = row; j < row + ClassUnit.CourseCount; j++)
{
//一天2节
for (int k = j + 1; k < row + ClassUnit.CourseCount; k++)
{
if (cu[j] == cu[k])
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -