static public List <Daerah> getInfoDaerah(string file_keterhubungan, string file_populasi) { 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(file_populasi); 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(file_keterhubungan); while ((line3 = file1.ReadLine()) != null) { 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); } } return(list_daerah); }
static public List <Daerah> findInfectedDaerah(int jumlahHari, string file_keterhubungan, string file_populasi) { 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>(); // BACA FILE list_daerah = getInfoDaerah(file_keterhubungan, file_populasi); foreach (Daerah daerah in list_daerah) { System.Console.WriteLine(); daerah.printInfo(); } using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\ASUS\source\repos\SimulasiCovid19\SimulasiCovid19\file-external\bfs-queue.csv")) { file.WriteLine("Nama Daerah,Berhasil Terinfeksi,Daerah Asal Infeksi,Populasi Terinfeksi,Hari Pertama Terinfeksi"); string line = ""; // 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) { line = ""; 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); // 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].setInfectedFrom(list_daerah[s].nama); 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); } } } line += list_daerah[t].nama + ","; if (list_daerah[s].berhasil_terinfeksi(c_peluang_travel) == true) { int terinfeksi = (int)(list_daerah[s].populasi_terinfeksi * c_peluang_travel); line += "Berhasil" + ","; line += list_daerah[s].nama + ","; line += terinfeksi + ","; line += list_daerah[t].first_day_infected; } else { line += "Tidak Berhasil" + ","; line += list_daerah[s].nama + ","; line += "0,-"; } file.WriteLine(line); } } return(list_daerah); }
public void Form2_Load(Form1 form1) { string file_keterhubungan = f1.textBox2.Text; string file_populasi = f1.textBox1.Text; string str = f1.inputBox.Text; int hari = Int32.Parse(str); Info info = new Info(hari, file_keterhubungan, file_populasi); info.writeBFSIntoCSV(); //create a viewer object Microsoft.Msagl.GraphViewerGdi.GViewer viewer = new Microsoft.Msagl.GraphViewerGdi.GViewer(); //create a graph object Daerah child = new Daerah(); Microsoft.Msagl.Drawing.Graph graph = new Microsoft.Msagl.Drawing.Graph("Graf"); foreach (Daerah parent in info.infected_daerah) { foreach (KeyValuePair <string, float> anak in parent.daerah_tetangga) { // jika anak terinfeksi dan asalnya dari daerah maka beri warna // cari nama anak di info.infected_daerah foreach (Daerah daerah in info.infected_daerah) { if (anak.Key == daerah.nama) { child = daerah; } } // jika child terinfeksi dan asalnya dari parent maka beri warna if (child.is_infected) { if ((child.infected_from == parent.nama)) { graph.AddEdge(parent.nama, child.nama).Attr.Color = Microsoft.Msagl.Drawing.Color.Red; } else { graph.AddEdge(parent.nama, anak.Key); } } else { graph.AddEdge(parent.nama, anak.Key); } } } // mewarnai node foreach (Daerah daerah in info.infected_daerah) { if (daerah.is_infected) { graph.FindNode(daerah.nama).Attr.FillColor = Microsoft.Msagl.Drawing.Color.Red; } else { graph.FindNode(daerah.nama).Attr.FillColor = Microsoft.Msagl.Drawing.Color.Gray; } } viewer.Graph = graph; //associate the viewer with the form this.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; this.Controls.Add(viewer); this.ResumeLayout(); }