public void TentativaErro() { Console.WriteLine("\nSolução: Algoritmo de tentativa e Erro"); int controle = -1, melhorCusto = int.MaxValue; Caminho[] melhorCaminho = new Caminho[numVertices - 1]; int[] permutacao = new int[numVertices]; for (int i = 0; i < melhorCaminho.Length; i++) { melhorCaminho[i] = new Caminho(); } permuta(permutacao, melhorCaminho, ref melhorCusto, controle, 1); ImprimeCaminho(melhorCaminho.ToList()); }
//////////////////////////////////////////////////////////// // Os métodos relacionados ao algoritmo guloso // // e com o Tentativa e Erro foram retirados e // // adaptados do código encontrado no link abaixo // // https://github.com/BarbaraGCOL/CaixeiroViajante // //////////////////////////////////////////////////////////// public void Guloso() { Console.WriteLine("\n Solução: Algoritmo Guloso"); int menor; int cidade1 = 1, cidade2 = 1; List <Caminho> caminho = new List <Caminho>(numVertices); Caminho Caminho = new Caminho(); for (int i = 1; i < caminho.Capacity; i++) { menor = custoMax; Caminho.cidade1 = cidade1; if (i == caminho.Capacity - 1) { menor = matriz[cidade1, 1]; cidade2 = 1; } else { for (int j = 1; j < numVertices; j++) { if (j != cidade1 && caminho.Find(x => x.cidade1 == j || x.cidade2 == j) == null) { if (matriz[cidade1, j] != 0 && matriz[cidade1, j] < menor) { menor = matriz[cidade1, j]; cidade2 = j; } } } } Caminho.cidade2 = cidade2; Caminho.distancia = menor; caminho.Add(Caminho); Caminho = new Caminho(); cidade1 = cidade2; } ImprimeCaminho(caminho); }