【发布时间】:2015-12-30 02:35:05
【问题描述】:
所以到目前为止,我编写了一个程序,它以以下格式读取城市和距离的 csv 文件:
阿拉斯加里程表,安克雷奇,安德森,坎特威尔, 安克雷奇,0,284,210, 安德森,284,0,74, 坎特威尔,210,74,0,
因此,该算法工作并输出城市,并使用最近邻算法按照最短路径访问城市的顺序始终以安克雷奇作为始发城市或起始城市。
使用此数据,算法的示例输出为:1,3,2。我已经用 27 个元素的图表运行了这个,也取得了不错的结果。我正在使用这个小程序进行编写和调试。
理想情况下,我正在寻找的输出是城市名称和累积里程。
现在我正在努力尝试将城市放入一个可以打印出来的数组中。对这两个部分的帮助将不胜感激,或者帮助记住最终目标也是值得赞赏的。
我的想法是最终我可能想要创建一个 {string, int} 的数组
所以我的输出看起来像这样..
锚地 0
坎特韦尔 210
安德森 284
我能够将数组的第一个元素设置为 1,但无法将新输出数组的第二个和第三个元素正确
这是我遇到问题的代码:
public class TSPNearestNeighbor {
private int numberOfNodes;
private Stack<Integer> stack;
public TSPNearestNeighbor()
{
stack = new Stack<>();
}
public void tsp(int adjacencyMatrix[][])
{
numberOfNodes = adjacencyMatrix[1].length;
// System.out.print(numberOfNodes);
// System.out.print(Arrays.deepToString(adjacencyMatrix));
int[] visited = new int[numberOfNodes];
// System.out.print(Arrays.toString(visited));
visited[1] = 1;
// System.out.print(Arrays.toString(visited));
stack.push(1);
int element, dst = 0, i;
int min = Integer.MAX_VALUE;
boolean minFlag = false;
System.out.print(1 + "\n");
//System.arraycopy(arr_cities, 0, arr_final, 0, 1); // Copies Anchorage to Pos 1 always
//System.out.print(Arrays.deepToString(arr_final)+ "\n");
while (!stack.isEmpty())
{
element = stack.peek();
i = 1;
min = Integer.MAX_VALUE;
while (i <= numberOfNodes-1)
{
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 + "\n");
minFlag = false;
continue;
}
stack.pop();
}
}
【问题讨论】:
标签: java arrays algorithm csv element