public int GetNearestVertexNo(int department, int floor, int noOfVertices, int graphNo, double lat, double lon)
        {
            double[] distance = new double[noOfVertices], temp;
            int[]    verticesSet;

            for (int i = 0; i < noOfVertices; i++)
            {
                distance[i] = int.MaxValue;
            }
            //according to the department,vertices set should change
            if (floor == 0)
            {
                verticesSet = Data.CSFloo_0_VerticesSet;
            }
            else if (floor == 1)
            {
                verticesSet = Data.CSFloo_1_VerticesSet;
            }
            else
            {
                verticesSet = Data.CSFloo_2_VerticesSet;
            }

            foreach (int V in verticesSet)
            {
                temp        = LocationData.GetVertexLoaction(graphNo, V);
                distance[V] = Math.Sqrt(Math.Pow(lat - temp[0], 2) + Math.Pow(lon - temp[1], 2));
            }
            return(Array.IndexOf(distance, distance.Min()));
        }
        public int GetNearestVertexNo(int noOfVertices, int graphNo, double lat, double lon)
        {
            double[] distance = new double[noOfVertices];
            double[] temp;
            for (int i = 0; i < noOfVertices; i++)
            {
                distance[i] = double.MaxValue;
            }

            for (int i = 0; i < noOfVertices; i++)
            {
                if (graphNo == 0)
                {
                    if (!Data.FootGraph_MissingVerticesSet.Contains(i))
                    {
                        temp        = LocationData.GetVertexLoaction(graphNo, i);
                        distance[i] = Math.Sqrt(Math.Pow(lat - temp[0], 2) + Math.Pow(lon - temp[1], 2));
                    }
                }
                else
                {
                    if (Data.VehicleGraph_VerticesSet.Contains(i))
                    {
                        temp        = LocationData.GetVertexLoaction(0, i);
                        distance[i] = Math.Sqrt(Math.Pow(lat - temp[0], 2) + Math.Pow(lon - temp[1], 2));
                    }
                }
            }
            return(Array.IndexOf(distance, distance.Min()));
        }
        public List <double[]> ValidateRoute(int start, int end, int graphNo, int routNo, double[,] route)
        {
            int[,] endPoints;
            List <double[]> lst  = new List <double[]>();
            int             size = route.GetLength(0);

            if (graphNo == 0)
            {
                endPoints = Data.foorRouteEndpoints;
            }
            else if (graphNo == 1)
            {
                endPoints = Data.vehicleRouteEndpoints;
            }
            else
            {
                endPoints = Data.CSDepartmentRouteEndpoints;
            }

            try
            {
                double[] temp_1 = LocationData.GetVertexLoaction(graphNo, start);
                double[] temp_2 = LocationData.GetVertexLoaction(graphNo, end);

                if ((temp_1[0] == route[0, 0] && temp_1[1] == route[0, 1]) &&
                    (temp_2[0] == route[size - 1, 0] && temp_2[1] == route[size - 1, 1]))
                {
                    for (int i = 0; i < size; i++)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }
                    return(lst);
                }
                if ((temp_2[0] == route[0, 0] && temp_2[1] == route[0, 1]) &&
                    (temp_1[0] == route[size - 1, 0] && temp_1[1] == route[size - 1, 1]))
                {
                    for (int i = size - 1; i >= 0; i--)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }
                    return(lst);
                }

                if (temp_1[0] == route[0, 0] && temp_1[1] == route[0, 1])
                {
                    for (int i = 0; i < size; i++)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }

                    if (endPoints[routNo, 0] == start)
                    {
                        Middle = endPoints[routNo, 1];
                    }
                    else
                    {
                        Middle = endPoints[routNo, 0];
                    }
                    return(lst);
                }
                if (temp_1[0] == route[size - 1, 0] && temp_1[1] == route[size - 1, 1])
                {
                    for (int i = size - 1; i >= 0; i--)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }

                    if (endPoints[routNo, 0] == start)
                    {
                        Middle = endPoints[routNo, 1];
                    }
                    else
                    {
                        Middle = endPoints[routNo, 0];
                    }
                    return(lst);
                }
                double[] mid = LocationData.GetVertexLoaction(graphNo, Middle);

                if ((mid[0] == route[0, 0] && mid[1] == route[0, 1]) &&
                    (temp_2[0] == route[size - 1, 0] && temp_2[1] == route[size - 1, 1]))
                {
                    for (int i = 0; i < size; i++)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }
                    return(lst);
                }
                if ((temp_2[0] == route[0, 0] && temp_2[1] == route[0, 1]) &&
                    (mid[0] == route[size - 1, 0] && mid[1] == route[size - 1, 1]))
                {
                    for (int i = size - 1; i >= 0; i--)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }
                    return(lst);
                }

                if (mid[0] == route[0, 0] && mid[1] == route[0, 1])
                {
                    for (int i = 0; i < size; i++)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }

                    if (endPoints[routNo, 0] == Middle)
                    {
                        Middle = endPoints[routNo, 1];
                    }
                    else
                    {
                        Middle = endPoints[routNo, 0];
                    }
                    return(lst);
                }
                if (mid[0] == route[size - 1, 0] && mid[1] == route[size - 1, 1])
                {
                    for (int i = size - 1; i >= 0; i--)
                    {
                        lst.Add(new double[] { route[i, 0], route[i, 1] });
                    }

                    if (endPoints[routNo, 0] == Middle)
                    {
                        Middle = endPoints[routNo, 1];
                    }
                    else
                    {
                        Middle = endPoints[routNo, 0];
                    }
                    return(lst);
                }
                return(lst);
            }
            catch (Exception e)
            {
                return(lst);
            }
        }