Beispiel #1
0
        static void Main(string[] args)
        {
            Flow flow = new Flow(new User("Test Teacher", new bool[] { true, false, false, false, false }, new int[] { 10 * 60, 0, 0, 0, 0 }, new int[] { 22 * 60, 0, 0, 0, 0 }),
                                 new List <User>()
            {
                new User("Student 1", new bool[] { true, false, false, false, false }, new int[] { 10 * 60, 0, 0, 0, 0 }, new int[] { 12 * 60, 0, 0, 0, 0 }),
                new User("Student 2", new bool[] { true, false, false, false, false }, new int[] { 10 * 60, 0, 0, 0, 0 }, new int[] { 10 * 60 + 50, 0, 0, 0, 0 }),
                //new User("Student 3", new bool[] { true, false, false, false, false }, new int[] { 11 * 60, 0, 0, 0, 0 }, new int[] { 13 * 60, 0, 0, 0, 0 }),
                //new User("Student 4", new bool[] { true, false, false, false, false }, new int[] { 14 * 60, 0, 0, 0, 0 }, new int[] { 18 * 60, 0, 0, 0, 0 })
            });

            // Randomly generated input

            /*var teacher = new User("Teacher", new bool[] { true, true, true, true, true }, new int[] { 10 * 60, 10 * 60, 10 * 60, 10 * 60, 10 * 60 }, new int[] { 18 * 60, 18 * 60, 18 * 60, 18 * 60, 18 * 60 });
             * // Generate 30 students
             * Random rnd = new Random();
             * List<User> students = new List<User>();
             * for (int i = 0; i < 30; i++)
             * {
             *  int[] timesFrom = new int[] { rnd.Next(10 * 60, 15 * 60), rnd.Next(10 * 60, 15 * 60), rnd.Next(10 * 60, 15 * 60), rnd.Next(10 * 60, 15 * 60), rnd.Next(10 * 60, 15 * 60) };
             *  int[] timesTo = new int[] { rnd.Next(12 * 60, 18 * 60), rnd.Next(12 * 60, 18 * 60), rnd.Next(12 * 60, 18 * 60), rnd.Next(12 * 60, 18 * 60), rnd.Next(12 * 60, 18 * 60) };
             *  students.Add(new User("Student " + i, new bool[] { true, true, true, true, true }, timesFrom, timesTo));
             * }
             * Flow flow = new Flow(teacher, students);*/


            // Alter flow

            flow.DEBUG_ClearNodes();
            Node root = new Node("Input", -1, Node.NodeType.Input);
            Node sink = new Node("Output", -1, Node.NodeType.Output);
            // Create students 1 and 2
            Node s1 = new Node("Student:Student 1", -1, Node.NodeType.Default);
            Node s2 = new Node("Student:Student 2", -1, Node.NodeType.Default);
            // Create times (not overlapping)
            Node t1 = new Node("Time (100)", 100, Node.NodeType.Default);
            Node t2 = new Node("Time (110)", 110, Node.NodeType.Default);
            Node t3 = new Node("Time (700)", 700, Node.NodeType.Default);
            // Add time chunk
            Node tch = new Node("TimeChunk", -1, Node.NodeType.Default);

            // Add paths from root to students and from times to timechunk and from timechunk via [timechunk] to sink
            root.OutputEdges.Add(new Edge(1, 0, root, s1));
            root.OutputEdges.Add(new Edge(1, 0, root, s2));
            s1.InputEdges.Add(root.OutputEdges[0]);
            s2.InputEdges.Add(root.OutputEdges[1]);

            t1.OutputEdges.Add(new Edge(1, 0, t1, tch));
            t2.OutputEdges.Add(new Edge(1, 0, t2, tch));
            t3.OutputEdges.Add(new Edge(1, 0, t3, tch));
            tch.InputEdges.Add(t1.OutputEdges[0]);
            tch.InputEdges.Add(t2.OutputEdges[0]);
            tch.InputEdges.Add(t3.OutputEdges[0]);

            tch.OutputEdges.Add(new TimeChunk(tch, sink));
            sink.InputEdges.Add(tch.OutputEdges[0]);
            // Add paths from students to times

            /*s1.OutputEdges.Add(new Edge(1, 0, s1, t1));
             * s2.OutputEdges.Add(new Edge(1, 0, s2, t2));
             * s2.OutputEdges.Add(new Edge(1, 0, s2, t3));
             * t1.InputEdges.Add(s1.OutputEdges[0]);
             * t2.InputEdges.Add(s2.OutputEdges[0]);
             * t3.InputEdges.Add(s2.OutputEdges[1]);*/
            s1.OutputEdges.Add(new Edge(1, 0, s1, t1));
            s1.OutputEdges.Add(new Edge(1, 0, s1, t3));
            s2.OutputEdges.Add(new Edge(1, 0, s2, t2));
            t1.InputEdges.Add(s1.OutputEdges[0]);
            t2.InputEdges.Add(s2.OutputEdges[0]);
            t3.InputEdges.Add(s1.OutputEdges[1]);
            // Apply new graph
            flow.Nodes.AddRange(new List <Node>()
            {
                root, s1, s2, t1, t2, t3, tch, sink
            });
            // End of alter flow

            int[] breaks = flow.GetResult();

            Console.WriteLine("Done");
            Console.ReadKey();
        }