⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.cs

📁 中小学排课系统代码 用于算法研究
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -