示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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);
        }