Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
旅行推销员代码不工作(Java)_Java_Graph Algorithm - Fatal编程技术网

旅行推销员代码不工作(Java)

旅行推销员代码不工作(Java),java,graph-algorithm,Java,Graph Algorithm,下面是java中的旅行推销员代码(给出错误的结果) 预期结果:1 3 2 4 1 代码结果:1 3 4 2 1此实现错误。这是一个困难的问题,因为你需要触摸每一条道路,或者至少要考虑每一条道路。这个实现基本上归结为“每一步,移动到我没有访问过的最近的节点”。由于堆栈没有记住你在哪里,所以它不会回溯到一条更好的路径可能存在于一条较长的道路上。 要解决这个问题,算法需要以某种方式将路径保留在内存中,并且在找到最佳解决方案之前不开始打印解决方案。(可以使用递归、保存整个路径的堆栈或其他方法。) pa

下面是java中的旅行推销员代码(给出错误的结果)

预期结果:1 3 2 4 1

代码结果:1 3 4 2 1

此实现错误。这是一个困难的问题,因为你需要触摸每一条道路,或者至少要考虑每一条道路。这个实现基本上归结为“每一步,移动到我没有访问过的最近的节点”。由于堆栈没有记住你在哪里,所以它不会回溯到一条更好的路径可能存在于一条较长的道路上。 要解决这个问题,算法需要以某种方式将路径保留在内存中,并且在找到最佳解决方案之前不开始打印解决方案。(可以使用递归、保存整个路径的堆栈或其他方法。)

package com.hinguapps.graph;

import java.util.InputMismatchException;
import java.util.Scanner;

public class TSP {
    private int numberOfNodes;
    private Stack < Integer > stack;

    public TSP() {
        stack = new Stack < Integer > ();
    }

    public void tsp(int adjacencyMatrix[][]) {
        numberOfNodes = adjacencyMatrix[1].length - 1;
        int[] visited = new int[numberOfNodes + 1];
        visited[1] = 1;
        stack.push(1);
        int element, dst = 0, i;
        int min = Integer.MAX_VALUE;
        boolean minFlag = false;
        System.out.print(1 + "\t");
        while (!stack.isEmpty()) {
            element = stack.peek();
            i = 1;
            min = Integer.MAX_VALUE;
            while (i <= numberOfNodes) {
                if (adjacencyMatrix[element][i] > 1 && visited[i] == 0) {
                    if (min > adjacencyMatrix[element][i]) {
                        min = adjacencyMatrix[element][i];
                        dst = i;
                        minFlag = true;
                    }
                }
                i++;
            }
            if (minFlag) {
                visited[dst] = 1;
                stack.push(dst);
                System.out.print(dst + "\t");
                minFlag = false;
                continue;
            }
            stack.pop();
        }
    }

    public static void main(String...arg) {
        int number_of_nodes;
        Scanner scanner = null;
        try {
            System.out.println("Enter the number of nodes in the graph");
            scanner = new Scanner(System.in);
            number_of_nodes = scanner.nextInt();
            int adjacency_matrix[][] = new int[number_of_nodes + 1][number_of_nodes + 1];
            System.out.println("Enter the adjacency matrix");
            for (int i = 1; i <= number_of_nodes; i++) {
                for (int j = 1; j <= number_of_nodes; j++) {
                    adjacency_matrix[i][j] = scanner.nextInt();
                }
            }
            for (int i = 1; i <= number_of_nodes; i++) {
                for (int j = 1; j <= number_of_nodes; j++) {
                    if (adjacency_matrix[i][j] == 1 &&
                        adjacency_matrix[j][i] == 0) {
                        adjacency_matrix[j][i] = 1;
                    }
                }
            }
            System.out.println("The cities are visited as follows: ");
            TSP tspNearestNeighbour = new TSP();
            tspNearestNeighbour.tsp(adjacency_matrix);
        } catch (InputMismatchException inputMismatch) {
            System.out.println("Wrong Input format");
        }
        scanner.close();
    }
}
0 10 5 40
2  0 5  1
6 13 0 12
1  8 9  0