Esempio n. 1
0
        void getEdges(undirectedGraph gu, List <int> initialNode, List <int> finalNode)
        {
            string str = Properties.Settings.Default.Database1ConnectionString;

            SqlConnection cnn = new SqlConnection(str);

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_camion, Costo_privado" +
                                            ", Tiempo_camion, Tiempo_privado, Distancia FROM Arista", cnn);

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                initialNode.Add((int)rdr[0]);
                finalNode.Add((int)rdr[1]);
                nodePublicCost.Add((int)rdr[2]);
                nodePrivateCost.Add((int)rdr[3]);
                nodePublicTime.Add((int)rdr[4]);
                nodePrivateTime.Add((int)rdr[5]);
                nodeDistance.Add((int)rdr[6]);
                numberEdges++;
            }
            rdr.Close();
        }
Esempio n. 2
0
 void undirectedGraph(List <int> weight, undirectedGraph gu, List <int> nodeNumbers, List <int> initialNode, List <int> finalNode)
 {
     for (int i = 0; i < numberNodes; i++)
     {
         gu.insertVertex(nodeNumbers[i].ToString());
     }
     for (int i = 0; i < numberEdges; i++)
     {
         gu.insertEdge(initialNode[i].ToString(), finalNode[i].ToString(), weight[i]);
     }
 }
Esempio n. 3
0
        void getNodes(undirectedGraph gu, List <int> nodeNumbers)
        {
            string str = Properties.Settings.Default.Database1ConnectionString;

            SqlConnection cnn = new SqlConnection(str);

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT IdNodo FROM NODO order by IdNodo", cnn);

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                nodeNumbers.Add((int)rdr[0]);
                numberNodes++;
            }
            rdr.Close();
            gu.init(numberNodes);
        }
Esempio n. 4
0
        void alternatePath(undirectedGraph gu, int startingNode, int endingNode)
        {
            List <int> alternateRoute = new List <int>();

            alternateRoute = gu.findAlternate(startingNode, endingNode);

            //make a dictionary with Ids and cities
            Dictionary <string, string> idCities = new Dictionary <string, string>();
            string        str = Properties.Settings.Default.Database1ConnectionString;
            SqlConnection cnn = new SqlConnection(str);

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT IdNodo,Ciudad FROM NODO", cnn);

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                idCities.Add(rdr[0].ToString(), rdr[1].ToString());
            }
            rdr.Close();
            cnn.Close();

            List <string> startNode = new List <string>();
            List <string> endNode   = new List <string>();

            //populate the start and end boxes
            for (int i = 0; i < alternateRoute.Count() - 1; i++) //0 1 2 3 4
            {
                lbx_start.Items.Add(idCities[alternateRoute[i].ToString()]);
                startNode.Add(alternateRoute[i].ToString());
            }
            for (int i = 1; i < alternateRoute.Count(); i++)
            {
                lbx_end.Items.Add(idCities[alternateRoute[i].ToString()]);
                endNode.Add(alternateRoute[i].ToString());
            }

            //now calculate the cost
            Dictionary <Tuple <string, string>, string> costPublic = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> costPrivate = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> timePublic = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> timePrivate = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> distance = new Dictionary <Tuple <string, string>, string>();
            int totalCostPublic = 0, totalCostPrivate = 0, totalTimePublic = 0, totalTimePrivate = 0, totalDistance = 0;

            if (rdl_privateCar.Checked)
            {
                for (int i = 1; i < alternateRoute.Count; i++)
                {
                    cnn = new SqlConnection(str);
                    cnn.Open();
                    cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_privado, " +
                                         "Tiempo_privado, Distancia FROM Arista WHERE (IdNodoInicial = " + alternateRoute[i - 1] + " AND " + "IdNodoFinal = " + alternateRoute[i] +
                                         ") OR (IdNodoFinal = " + alternateRoute[i - 1] + " AND " + "IdNodoInicial = " + alternateRoute[i] + ")", cnn);

                    rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                        Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());

                        costPrivate.Add(nodesTuple, rdr[2].ToString());
                        costPrivate.Add(nodesTuple2, rdr[2].ToString());
                        totalCostPrivate += (int)rdr[2];

                        timePrivate.Add(nodesTuple, rdr[3].ToString());
                        timePrivate.Add(nodesTuple2, rdr[3].ToString());
                        totalTimePrivate += (int)rdr[3];

                        distance.Add(nodesTuple, rdr[4].ToString());
                        distance.Add(nodesTuple2, rdr[4].ToString());
                        totalDistance += (int)rdr[4];
                    }
                    rdr.Close();
                    cnn.Close();
                }
                for (int i = 0; i < alternateRoute.Count - 1; i++)
                {
                    Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                    lbx_time.Items.Add(timePrivate[nodesTuple]);
                    txt_totalTime.Text = totalTimePrivate.ToString();

                    lbx_cost.Items.Add(costPrivate[nodesTuple]);
                    txt_totalCost.Text = totalCostPrivate.ToString();

                    lbx_distance.Items.Add(distance[nodesTuple]);
                    txt_totalDistance.Text = totalDistance.ToString();
                }
            }
            else if (rdl_publicCar.Checked)
            {
                for (int i = 1; i < alternateRoute.Count; i++)
                {
                    cnn = new SqlConnection(str);
                    cnn.Open();
                    cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_camion, Tiempo_camion, " +
                                         "Distancia FROM Arista WHERE (IdNodoInicial = " + alternateRoute[i - 1] + " AND " + "IdNodoFinal = " + alternateRoute[i] +
                                         ") OR (IdNodoFinal = " + alternateRoute[i - 1] + " AND " + "IdNodoInicial = " + alternateRoute[i] + ")", cnn);

                    rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                        Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());
                        costPublic.Add(nodesTuple, rdr[2].ToString());
                        costPublic.Add(nodesTuple2, rdr[2].ToString());
                        totalCostPublic += (int)rdr[2];

                        timePublic.Add(nodesTuple, rdr[3].ToString());
                        timePublic.Add(nodesTuple2, rdr[3].ToString());
                        totalTimePublic += (int)rdr[3];

                        distance.Add(nodesTuple, rdr[4].ToString());
                        distance.Add(nodesTuple2, rdr[4].ToString());
                        totalDistance += (int)rdr[4];
                    }
                    rdr.Close();
                    cnn.Close();
                }
                for (int i = 0; i < alternateRoute.Count - 1; i++)
                {
                    Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                    lbx_time.Items.Add(timePublic[nodesTuple]);
                    txt_totalTime.Text = totalTimePublic.ToString();

                    lbx_cost.Items.Add(costPublic[nodesTuple]);
                    txt_totalCost.Text = totalCostPublic.ToString();

                    lbx_distance.Items.Add(distance[nodesTuple]);
                    txt_totalDistance.Text = totalDistance.ToString();
                }
            }
        }
Esempio n. 5
0
        int runGraph(List <int> choiceWeight, bool alternate)
        {
            //create graph and its connections.
            undirectedGraph gu          = new undirectedGraph();
            List <int>      nodeNumbers = new List <int>();
            List <int>      initialNode = new List <int>();
            List <int>      finalNode   = new List <int>();

            getNodes(gu, nodeNumbers);
            getEdges(gu, initialNode, finalNode);
            undirectedGraph(choiceWeight, gu, nodeNumbers, initialNode, finalNode);
            int startingNode = getIdFromName(cbx_start.Text);
            int endingNode   = getIdFromName(cbx_end.Text);
            //get the shortest route into the string.
            string kek = gu.dijkstra(startingNode, endingNode);

            numberEdges = 0;
            numberNodes = 0;


            //split the string, first is TOTAL cost, the rest are nodes. The split is done with ','
            char delimeter = ',';

            string[] costAndNodes = kek.Split(delimeter);

            if (alternate)
            {
                alternatePath(gu, startingNode, endingNode);
                return(Int32.Parse(costAndNodes[0]));
            }

            //make a dictionary with Ids and cities
            Dictionary <string, string> idCities = new Dictionary <string, string>();
            string        str = Properties.Settings.Default.Database1ConnectionString;
            SqlConnection cnn = new SqlConnection(str);

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT IdNodo,Ciudad FROM NODO", cnn);

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                idCities.Add(rdr[0].ToString(), rdr[1].ToString());
            }
            rdr.Close();
            cnn.Close();

            List <string> startNode = new List <string>();
            List <string> endNode   = new List <string>();

            //populate the start and end boxes
            for (int i = 1; i < costAndNodes.Length - 2; i++)
            {
                lbx_start.Items.Add(idCities[costAndNodes[i]]);
                startNode.Add(costAndNodes[i]);
            }
            for (int i = 2; i < costAndNodes.Length - 1; i++)
            {
                lbx_end.Items.Add(idCities[costAndNodes[i]]);
                endNode.Add(costAndNodes[i]);
            }

            //now calculate the cost
            Dictionary <Tuple <string, string>, string> costPublic = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> costPrivate = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> timePublic = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> timePrivate = new Dictionary <Tuple <string, string>, string>();
            Dictionary <Tuple <string, string>, string> distance = new Dictionary <Tuple <string, string>, string>();
            int        totalCostPublic = 0, totalCostPrivate = 0, totalTimePublic = 0, totalTimePrivate = 0, totalDistance = 0;
            List <int> shortestRoute = new List <int>();

            //meter costAndNodes
            for (int i = 1; i < costAndNodes.Length - 1; i++)
            {
                shortestRoute.Add(Int32.Parse(costAndNodes[i]));
            }

            if (rdl_privateCar.Checked)
            {
                for (int i = 1; i < shortestRoute.Count; i++)
                {
                    cnn = new SqlConnection(str);
                    cnn.Open();
                    cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_privado, " +
                                         "Tiempo_privado, Distancia FROM Arista WHERE (IdNodoInicial = " + shortestRoute[i - 1] + " AND " + "IdNodoFinal = " + shortestRoute[i] +
                                         ") OR (IdNodoFinal = " + shortestRoute[i - 1] + " AND " + "IdNodoInicial = " + shortestRoute[i] + ")", cnn);

                    rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                        Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());

                        costPrivate.Add(nodesTuple, rdr[2].ToString());
                        costPrivate.Add(nodesTuple2, rdr[2].ToString());
                        totalCostPrivate += (int)rdr[2];

                        timePrivate.Add(nodesTuple, rdr[3].ToString());
                        timePrivate.Add(nodesTuple2, rdr[3].ToString());
                        totalTimePrivate += (int)rdr[3];

                        distance.Add(nodesTuple, rdr[4].ToString());
                        distance.Add(nodesTuple2, rdr[4].ToString());
                        totalDistance += (int)rdr[4];
                    }
                    rdr.Close();
                    cnn.Close();
                }
                for (int i = 0; i < costAndNodes.Length - 3; i++)
                {
                    Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                    lbx_time.Items.Add(timePrivate[nodesTuple]);
                    txt_totalTime.Text = totalTimePrivate.ToString();

                    lbx_cost.Items.Add(costPrivate[nodesTuple]);
                    txt_totalCost.Text = totalCostPrivate.ToString();

                    lbx_distance.Items.Add(distance[nodesTuple]);
                    txt_totalDistance.Text = totalDistance.ToString();
                }
            }
            else if (rdl_publicCar.Checked)//camion
            {
                for (int i = 1; i < shortestRoute.Count; i++)
                {
                    cnn = new SqlConnection(str);
                    cnn.Open();
                    cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_camion, Tiempo_camion, " +
                                         "Distancia FROM Arista WHERE (IdNodoInicial = " + shortestRoute[i - 1] + " AND " + "IdNodoFinal = " + shortestRoute[i] +
                                         ") OR (IdNodoFinal = " + shortestRoute[i - 1] + " AND " + "IdNodoInicial = " + shortestRoute[i] + ")", cnn);

                    rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                        Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());
                        costPublic.Add(nodesTuple, rdr[2].ToString());
                        costPublic.Add(nodesTuple2, rdr[2].ToString());
                        totalCostPublic += (int)rdr[2];

                        timePublic.Add(nodesTuple, rdr[3].ToString());
                        timePublic.Add(nodesTuple2, rdr[3].ToString());
                        totalTimePublic += (int)rdr[3];

                        distance.Add(nodesTuple, rdr[4].ToString());
                        distance.Add(nodesTuple2, rdr[4].ToString());
                        totalDistance += (int)rdr[4];
                    }
                    rdr.Close();
                    cnn.Close();
                }
                for (int i = 0; i < costAndNodes.Length - 3; i++)
                {
                    Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                    lbx_time.Items.Add(timePublic[nodesTuple]);
                    txt_totalTime.Text = totalTimePublic.ToString();

                    lbx_cost.Items.Add(costPublic[nodesTuple]);
                    txt_totalCost.Text = totalCostPublic.ToString();

                    lbx_distance.Items.Add(distance[nodesTuple]);
                    txt_totalDistance.Text = totalDistance.ToString();
                }
            }
            else
            {
                if (costPrivateSelected)
                {
                    for (int i = 1; i < shortestRoute.Count; i++)
                    {
                        cnn = new SqlConnection(str);
                        cnn.Open();
                        cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_privado, " +
                                             "Tiempo_privado, Distancia FROM Arista WHERE (IdNodoInicial = " + shortestRoute[i - 1] + " AND " + "IdNodoFinal = " + shortestRoute[i] +
                                             ") OR (IdNodoFinal = " + shortestRoute[i - 1] + " AND " + "IdNodoInicial = " + shortestRoute[i] + ")", cnn);

                        rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                            Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());

                            costPrivate.Add(nodesTuple, rdr[2].ToString());
                            costPrivate.Add(nodesTuple2, rdr[2].ToString());
                            totalCostPrivate += (int)rdr[2];

                            timePrivate.Add(nodesTuple, rdr[3].ToString());
                            timePrivate.Add(nodesTuple2, rdr[3].ToString());
                            totalTimePrivate += (int)rdr[3];

                            distance.Add(nodesTuple, rdr[4].ToString());
                            distance.Add(nodesTuple2, rdr[4].ToString());
                            totalDistance += (int)rdr[4];
                        }
                        rdr.Close();
                        cnn.Close();
                    }
                    for (int i = 0; i < costAndNodes.Length - 3; i++)
                    {
                        Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                        lbx_time.Items.Add(timePrivate[nodesTuple]);
                        txt_totalTime.Text = totalTimePrivate.ToString();

                        lbx_cost.Items.Add(costPrivate[nodesTuple]);
                        txt_totalCost.Text = totalCostPrivate.ToString();

                        lbx_distance.Items.Add(distance[nodesTuple]);
                        txt_totalDistance.Text = totalDistance.ToString();
                    }
                }
                else
                {
                    for (int i = 1; i < shortestRoute.Count; i++)
                    {
                        cnn = new SqlConnection(str);
                        cnn.Open();
                        cmd = new SqlCommand("SELECT IdNodoInicial, IdNodoFinal, Costo_camion, Tiempo_camion, " +
                                             "Distancia FROM Arista WHERE (IdNodoInicial = " + shortestRoute[i - 1] + " AND " + "IdNodoFinal = " + shortestRoute[i] +
                                             ") OR (IdNodoFinal = " + shortestRoute[i - 1] + " AND " + "IdNodoInicial = " + shortestRoute[i] + ")", cnn);

                        rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            Tuple <string, string> nodesTuple  = new Tuple <string, string>(rdr[0].ToString(), rdr[1].ToString());
                            Tuple <string, string> nodesTuple2 = new Tuple <string, string>(rdr[1].ToString(), rdr[0].ToString());
                            costPublic.Add(nodesTuple, rdr[2].ToString());
                            costPublic.Add(nodesTuple2, rdr[2].ToString());
                            totalCostPublic += (int)rdr[2];

                            timePublic.Add(nodesTuple, rdr[3].ToString());
                            timePublic.Add(nodesTuple2, rdr[3].ToString());
                            totalTimePublic += (int)rdr[3];

                            distance.Add(nodesTuple, rdr[4].ToString());
                            distance.Add(nodesTuple2, rdr[4].ToString());
                            totalDistance += (int)rdr[4];
                        }
                        rdr.Close();
                        cnn.Close();
                    }
                    for (int i = 0; i < costAndNodes.Length - 3; i++)
                    {
                        Tuple <string, string> nodesTuple = new Tuple <string, string>(startNode[i], endNode[i]);
                        lbx_time.Items.Add(timePublic[nodesTuple]);
                        txt_totalTime.Text = totalTimePublic.ToString();

                        lbx_cost.Items.Add(costPublic[nodesTuple]);
                        txt_totalCost.Text = totalCostPublic.ToString();

                        lbx_distance.Items.Add(distance[nodesTuple]);
                        txt_totalDistance.Text = totalDistance.ToString();
                    }
                }
            }
            return(Int32.Parse(costAndNodes[0]));
        }