我正在尝试编写一段Java代码,它可以从2D整数数组中推导出一维整数数组。我的2D数组看起来像这样:
Node1 Node2 Path
6 8 501
2 6 500
8 10 505
2 4 502
我的任务如下。我想从第一列(节点1)的元素到第二列(Node2)的元素找到" Path"我的意思是这样的:
" 2"至" 8"将按此顺序500 501
。来自" 2"到" 4"将是502
(不是500
,因为它终止于" 6")
我一直试图通过迭代简单的for循环来实现这一点,但一直在努力。有人可以告诉我如何解决这个问题吗?
我想写的代码片段是:
PathSequence:
for(int i = 0; i < PathGraphRow; i++){
if(PathGraph[i][0] == source){
if(i==0)
{
nextNode = PathGraph[i][1];
resultantPaths[counter] = PathGraph[i][2];
prev = lightPathGraph[i][2];
if(nextNode == dest){
break PathSequence;
}
counter++;
}else if(i > 0 && prev != PathGraph[i][2])
{
nextNode = PathGraph[i][1];
resultantPaths[counter] = PathGraph[i][2];
prev = PathGraph[i][2];
if(nextNode == dest){
break PathSequence;
}
counter++;
}
}
if(nextNode == PathGraph[i][0] && prev != PathGraph[i][2]){
nextNode = PathGraph[i][1];
resultantPaths[counter] = PathGraph[i][2];
prev = PathGraph[i][2];
if(nextNode == dest){
break PathSequence;
}
counter++;
}
if(i == PathGraphRow-1 && PathGraph[i][2] != resultantPaths[counter]){
if(PathGraph[i][1] != dest){
resultantPaths = new int[PathCount];
}
}
}
}
谢谢。
此致
答案 0 :(得分:0)
除非我忽略了一些细节,否则如果没有子路径,问题就显得微不足道了。你只需要一个非常具体的for循环。
for (int i = 0; i < columns; i++)
{
Path path = new Path(array[i][0], array[i][1], array[i][2]);
pathsArray.Add(path);
}
这当然是伪代码,但基本上我会这样做。我会把每条路都变成三元组。我仍然不太明白你打算如何存储数据,如果你把所有值都放在1D int数组中,你怎么知道路径的起点和终点?假设所有路径都由一个1D阵列中起作用的起点,终点和结果定义,尽管使用它比2D阵列更糟糕。如果路径具有任意长度,则无法将数据存储在一维数组中。无论如何,这里的代码将表格放在一维数组中(假设没有更大的复杂性);
int[] paths = new int[2dArray.length * 3];
int mapper = 0;
for (int i = 0; i < 2dArray.length; i++)
{
paths[mapper] = 2dArray[i][0];
paths[mapper + 1] = 2dArray[i][1];
paths[mapper + 2] = 2dArray[i][2];
mapper += 3;
}
然后要访问数组,你需要做一堆mod 3垃圾来知道你得到的值......
if (index % 3 == 0)
//path start
else if (index % 3 == 1)
//path end
else if (index % 3 == 2)
// result of path