static public List <Daerah> getInfoDaerah()
        {
            int           counter = 0, numOfDaerah = 0;
            string        line, line3, daerah_terinfeksi = "";
            List <Daerah> list_daerah = new List <Daerah>();

            // Read the file and display it line by line.
            System.IO.StreamReader file =
                new System.IO.StreamReader(@"/Users/r4r4s274/Documents/RARAS/IF/simulasi-penyebaran-corona/populasi-daerah.txt");
            while ((line = file.ReadLine()) != null)
            {
                counter++;
                if (counter == 1)
                {
                    string[] line1 = line.Split(' ');
                    for (int i = 0; i < line1.Length; i++)
                    {
                        if (i == 0)
                        {
                            numOfDaerah = Int32.Parse(line1[i]);
                        }
                        else if (i == 1)
                        {
                            daerah_terinfeksi = line1[i];
                        }
                    }
                }
                else if (counter > 1)
                {
                    string[] line2 = line.Split(' ');
                    for (int i = 0; i < line2.Length; i++)
                    {
                        Daerah daerah_temp = new Daerah();
                        if (i == 0)
                        {
                            daerah_temp.setNamaDaerah(line2[i]);
                            daerah_temp.setPopulasi(Int32.Parse(line2[i + 1]));
                            daerah_temp.setFirstDayInfected(100000000);
                            list_daerah.Add(daerah_temp);
                        }
                    }
                }
            }

            counter = 0;
            System.IO.StreamReader file1 =
                new System.IO.StreamReader(@"/Users/r4r4s274/Documents/RARAS/IF/simulasi-penyebaran-corona/daerah-dan-keterhubungan.txt");
            while ((line3 = file1.ReadLine()) != null)
            {
                // System.Console.WriteLine(line3);
                counter++;
                if (counter > 1)
                {
                    string[] line4 = line3.Split(' ');
                    int      i     = 0;
                    int      a     = 0;
                    bool     found = false;
                    while (a < list_daerah.Count && !found)
                    {
                        if (list_daerah[a].nama == line4[i])
                        {
                            found = true;
                        }
                        else
                        {
                            a += 1;
                        }
                    }
                    Daerah daerah_temp = list_daerah[a];
                    daerah_temp.addChildren(line4[i + 1], float.Parse(line4[i + 2]));
                }
            }

            file1.Close();
            file.Close();
            // System.Console.WriteLine("There were {0} lines.", counter);
            System.Console.WriteLine("Ada {0} daerah", numOfDaerah);
            System.Console.WriteLine("Daerah yang pertama kali diinfeksi {0}", daerah_terinfeksi);
            foreach (Daerah daerah in list_daerah)
            {
                if (daerah_terinfeksi == daerah.nama)
                {
                    daerah.setIsInfected(true);
                    daerah.setFirstDayInfected(0);
                }
            }
            return(list_daerah);
        }
        static void Main(string[] args)
        {
            List <Daerah>  list_daerah    = new List <Daerah>();
            Queue <string> sumber         = new Queue <string>();
            Queue <String> tujuan         = new Queue <String>();
            Queue <float>  peluang_travel = new Queue <float>();
            // List<string> sudah_dicek = new List<string>();
            string input;
            int    jumlahHari;

            // BACA FILE
            list_daerah = getInfoDaerah();
            foreach (Daerah daerah in list_daerah)
            {
                System.Console.WriteLine();
                daerah.printInfo();
            }

            // INPUT HARI
            System.Console.WriteLine();
            System.Console.WriteLine("Masukkan jumlah hari!");
            input      = System.Console.ReadLine();
            jumlahHari = System.Convert.ToInt32(input);

            // INISIASI QUEUE PERTAMA
            Daerah first_daerah = new Daerah();
            string first;

            foreach (Daerah daerah in list_daerah)
            {
                if (daerah.is_infected)
                {
                    first_daerah = daerah;
                }
            }
            first = first_daerah.nama;
            int i = find_index(list_daerah, first);

            list_daerah[i].setFirstDayInfected(0);
            list_daerah[i].setTotalHari(jumlahHari - list_daerah[i].first_day_infected);

            foreach (KeyValuePair <string, float> kvp in list_daerah[i].daerah_tetangga)
            {
                sumber.Enqueue(list_daerah[i].nama);
                tujuan.Enqueue(kvp.Key);
                peluang_travel.Enqueue(kvp.Value);
            }

            // LOOPING
            while (tujuan.Count() > 0)
            {
                string c_sumber         = sumber.Dequeue();
                string c_tujuan         = tujuan.Dequeue();
                float  c_peluang_travel = peluang_travel.Dequeue();

                int s = find_index(list_daerah, c_sumber);
                int t = find_index(list_daerah, c_tujuan);

                System.Console.WriteLine();
                System.Console.WriteLine("daerah asal   = {0}", list_daerah[s].nama);
                System.Console.WriteLine("daerah tujuan = {0}", list_daerah[t].nama);
                System.Console.WriteLine("berhasil = {0}", list_daerah[s].berhasil_terinfeksi(c_peluang_travel));
                System.Console.WriteLine("populasi terinfeksi {0} ", list_daerah[s].populasi_terinfeksi);

                // MENGECEK APAKAH BERHASIL TERINFEKSI/TIDAK
                if (list_daerah[s].berhasil_terinfeksi(c_peluang_travel) == true)
                {
                    list_daerah[t].setIsInfected(true);
                    double p   = list_daerah[s].populasi;
                    double tr  = c_peluang_travel;
                    double day = -4 * (1 / Math.Log(Math.E, (p * tr - 1) / (p - 1))) + 1;

                    int first_day_new = (int)day + list_daerah[s].first_day_infected;
                    System.Console.WriteLine("first_day_new {0}", first_day_new);
                    System.Console.WriteLine("first_day_old {0}", list_daerah[t].first_day_infected);

                    // ANAK DARI NODE AKAN DIMASUKKAN KE QUEUE APABILA FIRST DAY INFECTED LEBIH KECIL DARI YANG LAMA
                    if (first_day_new < list_daerah[t].first_day_infected)
                    {
                        list_daerah[t].setFirstDayInfected(first_day_new);
                        list_daerah[t].setTotalHari(jumlahHari - list_daerah[t].first_day_infected);
                        System.Console.WriteLine("day pertama {0} terinfeksi = {1}", list_daerah[t].nama, list_daerah[t].first_day_infected);
                        foreach (KeyValuePair <string, float> kvp in list_daerah[t].daerah_tetangga)
                        {
                            sumber.Enqueue(list_daerah[t].nama);
                            tujuan.Enqueue(kvp.Key);
                            peluang_travel.Enqueue(kvp.Value);
                        }
                    }
                }
            }

            // HASIL AKHIR
            foreach (Daerah daerah in list_daerah)
            {
                System.Console.WriteLine();
                daerah.printInfo();
            }
        }