//Constructor
        //Constructor sekaligus membentuk isi Semester;
        public Pengambilan_Matkul(List <int> Solution, DirectedEdgeMatrix M)
        {
            //Pembentukan array berdasarkan ukuran graf M
            Semester          = new List <List <int> >(M.getSize());
            MatkulPerSemester = new List <int>(M.getSize());
            for (int i = 0; i < M.getSize(); i++)
            {
                Semester.Add(new List <int>(M.getSize()));
            }

            //Pemilihan Matkul pada tiap semester
            int j           = 0;
            int countMatkul = 0;

            for (int i = 0; i < M.getSize(); i++)
            {
                if (Semester[0].Count == 0)
                {
                    Semester[j].Add(Solution[i]);
                    countMatkul += 1;
                }
                else
                {
                    //Jika ada prerequisitenya, diambil pada semester berikutnya
                    bool foundPrerequisite = false;
                    for (int k = 0; k < countMatkul; k++)
                    {
                        if (M.isAdjacent(Semester[j][k], Solution[i]))
                        {
                            foundPrerequisite = true;
                        }
                    }
                    if (foundPrerequisite)
                    {
                        MatkulPerSemester.Add(countMatkul);
                        j++;
                        countMatkul = 0;
                    }
                    countMatkul += 1;
                    Semester[j].Add(Solution[i]);
                }
            }
            JumlahSemester = j + 1; MatkulPerSemester.Add(countMatkul);
            MatkulPerSemester.Add(countMatkul);
        }
示例#2
0
        private void button1_Click(object sender, EventArgs e)
        {
            //Ini adalah tomboll trigger untuk memanggil animasi dan algoritma dfs
            //Inisiasi
            button2.Enabled = true;
            button3.Enabled = true;
            DFS_Sort algoritmaDFS = new DFS_Sort(resultGraph.getSize());
            //Mulai melakukan dfs
            int time = 1;

            for (int i = 0; i < resultGraph.getSize(); i++)
            {
                if (!algoritmaDFS.isVerticeVisited(i))
                {
                    algoritmaDFS.Search(resultGraph, i, ref time);
                }
            }
            algoritmaDFS.makeSolution();

            //Melakukan animasi dfs dengan memanfaatkan track record
            for (int i = 0; i < algoritmaDFS.getOrderCount(); i++)
            {
                bool isEnd             = algoritmaDFS.isVerticeOrderEnd(i);
                int  currentNode       = algoritmaDFS.getVerticeOrder(i);
                Node currentNodeObject = graph.FindNode(pemetaanIndex[currentNode]);
                if (!isEnd)
                {
                    //Update time stamp
                    selfEdge[currentNode].Attr.Label = (i + 1).ToString() + "/";
                    currentNodeObject.Attr.Fillcolor = Microsoft.Glee.Drawing.Color.Yellow;
                }
                else
                {
                    selfEdge[currentNode].Attr.Label = selfEdge[currentNode].Attr.Label + (i + 1).ToString();
                }
                if (i != 0)
                {
                    int  previousNode       = algoritmaDFS.getVerticeOrder(i - 1);
                    Node previousNodeObject = graph.FindNode(pemetaanIndex[previousNode]);

                    previousNodeObject.Attr.Fillcolor = Microsoft.Glee.Drawing.Color.Red;
                }
                //Melakukan update gambar
                viewer.Graph = graph;
                viewer.Update();
                System.Threading.Thread.Sleep(waktuDelay);
            }
            //Menyimpan solusi
            solution = algoritmaDFS.getAllSolution();


            //form.ShowDialog();
        }