public void geraEscolheCaminhos(ref int[] permutacao, Grafo grafo, Trabalho[] melhorRota, out int melhorCusto) { int controle = -1; melhorCusto = int.MaxValue; for (int i = 0; i < melhorRota.Length; i++) { melhorRota[i] = new Trabalho(); } permuta(permutacao, grafo, melhorRota, ref melhorCusto, controle, 1); }
public void encontraCaminho(Grafo grafo, List <Trabalho> caminho, ref int custo) { int i, balc = 0, est = 0, menorCusto, tamanho = caminho.Capacity; int[] pos = new int[grafo.Mat.Length]; List <int> adicionados = new List <int>(grafo.Mat.Length); adicionados.Add(0); Trabalho trabalho = new Trabalho(); custo = 0; for (i = 0; i < tamanho; i++) { menorCusto = MaxCusto + 1; trabalho.balcao = balc; if (i == caminho.Capacity - 1) { menorCusto = grafo.Mat[balc, 0]; est = 0; } else { for (int j = 0; j < tamanho; j++) { if (j != balc && !adicionados.Contains(j)) { if (grafo.Mat[balc, j] != 0 && grafo.Mat[balc, j] < menorCusto) { menorCusto = grafo.Mat[balc, j]; est = j; } } } } trabalho.estoque = est; trabalho.custo = menorCusto; adicionados.Add(est); custo += menorCusto; caminho.Add(trabalho); trabalho = new Trabalho(); balc = est; } }
public static void Main(string[] args) { List <Trabalho> caminho; int numPedidos, custo = 0; SuperZe superZe = new SuperZe(); Grafo grafo = new Grafo(); Stopwatch stopwatch = new Stopwatch(); int[] permutacao; Trabalho[] melhorRota; int numPedidos2, melhorCusto; int aux; string resp = null; do { Console.WriteLine("Escolha qual Zé você deseja:" + "\n\n [Magro] Digite 1 " + " [Velho] Digite 2 "); Console.Write("\n\nResposta:"); aux = int.Parse(Console.ReadLine()); if (aux == 1) { //Zé Velho Console.Write("\n\nDigite o numero de pedidos e tecle ENTER: "); numPedidos = int.Parse(Console.ReadLine()); superZe.montaGrafo(out grafo, numPedidos); caminho = new List <Trabalho>(numPedidos);; superZe.encontraCaminho(grafo, caminho, ref custo); superZe.imprimeCaminho(custo, caminho); Console.Write("\n\nVocê deseja Continuar? \nSim ou Não\n"); resp = Console.ReadLine(); Console.ReadKey(true); } if (aux == 2) { //Zé Magrão SuperZe superZe2 = new SuperZe(); Grafo grafo2 = new Grafo(); Console.Write("\n\nDigite o numero de pedidos e tecle ENTER: "); numPedidos2 = int.Parse(Console.ReadLine()); superZe.montaGrafo(out grafo2, numPedidos2); permutacao = new int[numPedidos2]; melhorRota = new Trabalho[numPedidos2]; caminho = new List <Trabalho>(numPedidos2); superZe2.geraEscolheCaminhos(ref permutacao, grafo2, melhorRota, out melhorCusto); superZe2.imprimeMelhorCaminho(melhorCusto, melhorRota); Console.Write("\n\nVocê deseja Continuar? \nSim ou Não\n"); resp = Console.ReadLine(); Console.ReadKey(true); } } while (resp != "Não"); Environment.Exit(0); Console.ReadKey(true); }