Beispiel #1
0
        static void contabilizaTodosTempos(Cidades matriz)
        {
            string       nomeArquivo     = "Dados do exercício.csv";
            StreamWriter escreverArquivo = new StreamWriter(nomeArquivo, true); //se existe, continua a escrever
            Stopwatch    watch;

            #region Testando Quadratico
            Quadratico CaixeiroQuadratico = new Quadratico();

            //inicia contagem do tempo
            watch = Stopwatch.StartNew();
            Console.Write("\nQuadrático: ");
            Console.WriteLine(CaixeiroQuadratico.GerarMelhorCaminho(matriz));
            watch.Stop();
            //finaliza contagem do tempo

            var tempoQuadratico = watch.ElapsedMilliseconds; //salva tempo
            #endregion

            #region Testando Força Bruta
            int[]  permutacao; //vetor com um caminho possíveil
            Rota[] melhorRota; //contem a melhor rota de viagem
            int    custo = 0, qtdeCidades = matriz.Matriz.GetLength(0);

            Forca_bruta caixeiro_forca_bruta = new Forca_bruta(); //força bruta

            permutacao = new int[qtdeCidades];
            melhorRota = new Rota[qtdeCidades];

            //inicia contagem do tempo
            watch = Stopwatch.StartNew();
            caixeiro_forca_bruta.Escolher_caminhos(ref permutacao, matriz, melhorRota, out custo);
            Console.Write("\nForça bruta: ");
            Console.WriteLine(caixeiro_forca_bruta.Imprime_Melhor_Caminho(custo, melhorRota));
            watch.Stop();
            //finaliza contagem do tempo

            var tempoForcaBruta = watch.ElapsedMilliseconds; //salva tempo
            #endregion

            #region Testando Exponencial
            permutacao = new int[qtdeCidades];  //tenho quase certeza que pode tirar isso
            melhorRota = new Rota[qtdeCidades]; //tenho quase certeza que pode tirar isso

            Exponencial vizinho = new Exponencial();

            //inicia contagem do tempo
            watch = Stopwatch.StartNew();
            vizinho.Permutacoes(matriz, matriz.Matriz.GetLength(0), permutacao);
            watch.Stop();
            //finaliza contagem do tempo

            var tempoExponencial = watch.ElapsedMilliseconds; //salva tempo
            #endregion
            Console.Write("\nExponencial: ");
            Console.WriteLine(vizinho.imprimeResultados(permutacao, matriz));
            escreverArquivo.WriteLine("{0};{1};{2};{3}", matriz.Matriz.GetLength(0), tempoForcaBruta, tempoExponencial, tempoQuadratico);
            Console.WriteLine("---------//-----------------//---------------//---------------//----------------------//----------");
            escreverArquivo.Close();
        }
        public void Escolher_caminhos(ref int[] permutacao, Cidades matrizDistancias, Rota[] melhorRota, out int melhorCusto)
        {
            int controle = -1;

            melhorCusto = int.MaxValue;

            for (int i = 0; i < melhorRota.Length; i++)
            {
                melhorRota[i] = new Rota();
            }

            /* Gera os caminhos possiveis e escolhe o melhor, chamando a funcao recursiva
             * permuta */
            permuta(permutacao, matrizDistancias, melhorRota, ref melhorCusto, controle, 1);
        }