Пример #1
0
 public Cidade(int[] visitada, int id, Cidade pai)
 {
     this.visitada = (int[]) visitada.Clone();
     this.visitada[id] = 1;
     this.pai = pai;
     this.id = id;
     if (pai != null)
         custo = pai.custo + TSPInfo.adjacencyMatrix[id][pai.id];
     else
         custo = 0;
 }
Пример #2
0
        public static int[] tsp(int[][] adjacencyMatrix, int inicio)
        {
            TSPInfo.adjacencyMatrix = adjacencyMatrix;
            cidades = new List<Cidade>();
            int numberOfNodes = adjacencyMatrix[1].Length;
            int[] visited = new int[numberOfNodes];
            int[] caminho = new int[numberOfNodes + 1];
            Cidade ini = new Cidade(visited, inicio, null);
            cidades.AddRange(ini.avancaCaminho());
            bool complete = false;
            int value = 0;

            do {
                int min = int.MaxValue;
                for (int i = 0; i < cidades.Count; i++) {
                    int custo = cidades[i].custo + adjacencyMatrix[inicio][cidades[i].id];
                    if (min > custo) {
                        value = i;
                        min = custo;
                    }
                }

                List<Cidade> filhas = cidades[value].avancaCaminho();

                if (filhas.Count == 0) {
                    complete = true;
                } else {
                    cidades.RemoveAt(value);
                    cidades.AddRange(filhas);
                }

            } while (!complete);

            Cidade cid = cidades[value];

            caminho[numberOfNodes] = cid.custo + adjacencyMatrix[inicio][cid.id];
            caminho[0] = inicio;

            for (int i = numberOfNodes - 1; i > 0; i--)
            {
                caminho[i] = cid.id;
                cid = cid.pai;
            }

            return caminho;
        }