Exemplo n.º 1
0
        private void btn_search_sortest_Click(object sender, EventArgs e) // calculate the shortest path from dijiksar
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            LinkedList <int[]> graph       = new LinkedList <int[]>(); // data store as metrics
            List <DataResult>  dataResults = new List <DataResult>();

            try
            {
                for (int yy = 0; yy < list.Count; yy++)
                {                                                                                                                             // this for loop useing to stations row one by one read
                    int[] xdata    = new int[list.Count];                                                                                     //this array used to store one station have distance combination ex xdata={0,2,0,0,4}
                    int   stationy = list[yy].id;                                                                                             //this variable use to get current station id
                    for (int xx = 0; xx < list.Count; xx++)
                    {                                                                                                                         // this loop using to calulate one station have cobinations
                        int stationx = list[xx].id;                                                                                           //current station id for -> this side
                        var ss       = db.stationDistances.Where(a => a.station1id == stationy && a.station2id == stationx).FirstOrDefault(); // find the value this combination from tbdistance table
                        if (ss != null)
                        {
                            xdata[xx] = Convert.ToInt32(ss.distance);
                        }
                        else
                        {
                            xdata[xx] = 0; //if value is null then assign the 0
                        }
                    }
                    graph.AddFirst(xdata); //add the link list as a 1d array
                }
            }catch (Exception ex)
            {
                popError("error while preparing data for to find shortestest path" + Environment.NewLine + ex.Message);
                return;
            }
            int selectpath             = loc3.SelectedIndex; // get select station
            LinkedList <int[]> getdata = null;

            try
            {
                getdata = Dijkstra.DijkstraAlgo(graph, selectpath, list.Count);//this methed help find the shortest path from dijikstar
            }catch (Exception ex)
            {
                popError("Error occured while finding the shortest distance" + Environment.NewLine + ex.Message);
                return;
            }
            try
            {
                int   co        = 0;
                int[] arraypath = new int[list.Count]; //create array to store to shotest path from link list
                int[] ditance   = new int[list.Count]; // create an arra for store distance from link list
                ;
                foreach (int[] ld in getdata)
                {
                    ditance[co]   = ld[0];
                    arraypath[co] = ld[1]; // storing data

                    co++;
                }
                for (int j = 0; j < list.Count; j++)
                {
                    int    stationname = -1;     //add stationname index
                    string sname       = " -> "; // add shortest path
                    string ans         = "yes";  // this using confirm in using first time
                    int    index       = -1;
                    while (true)
                    {
                        if (selectpath == index)
                        {
                            ans = "no";
                            DataResult dr = new DataResult();   //create detset object
                            dr.Path     = sname + list[j].Name; // asign the shortest path
                            dr.Distance = ditance[j];           //asign the distance
                            dataResults.Add(dr);                //add the object
                            //result = result + (list[selectpath].Name + sname + list[j].Name) + " = " + ditance[j] + "\n";
                            break;
                        }
                        else
                        {
                            int sid;
                            if (ans == "yes")
                            {
                                ans   = "no";
                                sname = "";
                                sid   = list[arraypath[j]].id;
                            }
                            else
                            {
                                sid = list[stationname].id;
                                //sid = list.FindIndex(a => a.id == temp);
                            }

                            index       = list.FindIndex(a => a.id == sid);
                            stationname = arraypath[index];
                            sname       = list[index].Name + " -> " + sname;
                        }
                        // counter++;
                    }
                }
            }catch (Exception ex)
            {
                popError("Error occured while delivering the results" + Environment.NewLine + ex.Message);
            }
            stopWatch.Stop();
            TimeSpan ts          = stopWatch.Elapsed;
            string   elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);

            lbl_time.Text            = "Calculated Time " + elapsedTime;
            dataGridView1.DataSource = dataResults; //add data to data grid
        }
Exemplo n.º 2
0
        private void btn_search_Click(object sender, EventArgs e)
        {
            LinkedList <int[]> graph = new LinkedList <int[]>();



            var list = db.stations.ToList();


            for (int yy = 0; yy < list.Count; yy++)
            {
                int[] xdata    = new int[list.Count];
                int   stationy = list[yy].id;
                for (int xx = 0; xx < list.Count; xx++)
                {
                    int stationx = list[xx].id;
                    var ss       = db.stationDistances.Where(a => a.station1id == stationy && a.station2id == stationx).FirstOrDefault();
                    if (ss != null)
                    {
                        xdata[xx] = Convert.ToInt32(ss.distance);
                    }
                    else
                    {
                        xdata[xx] = 0;
                    }
                }
                graph.AddFirst(xdata);
            }

            int selectpath = loc1.SelectedIndex;
            LinkedList <int []> getdata = Dijkstra.DijkstraAlgo(graph, selectpath, list.Count);
            int co = 0;

            int[]  arraypath = new int[list.Count];
            int[]  ditance   = new int[list.Count];
            string result    = "";

            foreach (int[] ld in getdata)
            {
                ditance[co]   = ld[0];
                arraypath[co] = ld[1];

                co++;
            }
            for (int j = 0; j < list.Count; j++)
            {
                int    stationname = -1;
                string sname       = " -> ";
                string ans         = "yes";
                while (true)
                {
                    if (selectpath == arraypath[j] || stationname == arraypath[j])
                    {
                        ans    = "no";
                        result = result + (list[selectpath].Name + sname + list[j].Name) + " = " + ditance[j] + "\n";
                        break;
                    }
                    else
                    {
                        if (ans == "yes")
                        {
                            ans   = "no";
                            sname = "";
                        }
                        int sid   = list[arraypath[j]].id;
                        int index = list.FindIndex(a => a.id == sid);
                        stationname = index;
                        sname       = sname + " -> " + list[index].Name + " -> ";
                    }
                }
            }
            lbl_result.Text = result;
        }