Exemplo n.º 1
0
        /// <summary>
        /// Metodo de busca do menor caminho.
        /// </summary>
        /// <param name="startNode">Node de ida</param>
        /// <param name="target">Ponto de chegada</param>
        /// <param name="path">Pontos de Caminhos</param>
        /// <param name="minDistance">Distancia minima achada</param>
        public void PathFinder(Node startNode, string target, PathGraph path, ref int minDistance)
        {
            // Para cada vizinho de um ponto de ida
            foreach (var neighbor in startNode.neighborList)
            {
                //Calcule soma da distancia atual ate ao vizinho
                int DistanceToCompare = path.TotalDistance + neighbor.Distance;

                // Se a soma e' maior do que distancia menor despreza o caminho.
                if (DistanceToCompare >= minDistance)
                {
                    continue;
                }

                // Se ja passou pelo este vizinho, despreza o caminho.
                if (path.Nodes.Split(',').Contains(neighbor.Name))
                {
                    continue;
                }


                /* Se este vizinho e' o ponto de chegada final,
                 * guarda o valor da distancia
                 */
                if (neighbor.Name.Equals(target))
                {
                    minDistance = DistanceToCompare;
                    continue;
                }


                Node neighborNode = new Node();
                neighborNode.GetNodeByName(neighbor.Name);

                /* Se o vizinho e' uma folha ("A" ou "F")
                 * Checa se nao e' o ponto de chegada final, despreza o caminho.
                 */
                if (neighborNode.IsLeaf)
                {
                    if (!neighborNode.Name.Equals(target))
                    {
                        continue;
                    }
                }

                /* Continue a busca
                 */
                PathGraph newPath = new PathGraph(path.Nodes, path.TotalDistance);
                newPath.TotalDistance += neighbor.Distance;
                newPath.Nodes         += "," + neighbor.Name;

                PathFinder(neighborNode, target, newPath, ref minDistance);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Esse metodo calculo a distancia
        /// do caminho minimo.
        /// </summary>
        /// <param name="start"> Ponto de ida</param>
        /// <param name="target">Ponto de chegada</param>
        /// <returns>Menor distancia</returns>
        public int MinimumDistance(string start, string target)
        {
            if (start == target)
            {
                return(0);
            }

            Node StartNode = new Node();

            StartNode.GetNodeByName(start);
            PathGraph path        = new PathGraph(start);
            int       minDistance = Int32.MaxValue;

            PathFinder(StartNode, target, path, ref minDistance);

            return(minDistance);
        }