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