【发布时间】:2016-09-23 13:13:37
【问题描述】:
您好,我在查找邻接矩阵中的最短路径时遇到问题。我想找到从 startPoint 到 finishPoint 的路径(例如 2 - 9)。 我的代码就在下面,我在“printPath(parent, parent[j]);”中有 StackOverflowError线。 非常感谢你..
public int minDistance(int dist[], boolean sptSet[])
{
int min = 999, minIndex = 0;
for (int i = 0; i < roomCount; i++)
{
if (sptSet[i] == false && dist[i] <= min)
{
min = dist[i];
minIndex = i;
}
}
return minIndex;
}
public void printPath(int parent[], int j)
{
if (parent[j] == -1)
return;
if (j >= 80)
return;
printPath(parent, parent[j]);
//Log.i("printPath()", "j : " + j);
return;
}
public void printSolution(int dist[], int n, int parent[])
{
int src = 0;
//Log.i("printSolution", "Vertex Distance Path");
for (int i = 0; i < roomCount; i++)
{
//Log.i("printSolution", "src : " + src + " -> i: " + i + " dist[i] : " + dist[i]);
printPath(parent, i);
}
}
public void dijks(int[][] graph, int src)
{
int[] dist = new int[roomCount];
boolean[] sptSet = new boolean[roomCount];
int[] parent = new int[roomCount];
for (int i = 0; i < roomCount; i++)
{
parent[0] = -1;
dist[i] = 999;
sptSet[i] = false;
}
dist[src] = 0;
for (int count = 0; count < roomCount-1; count++)
{
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < roomCount; v++)
{
if (!sptSet[v] && dist[u] + graph[u][v] < dist[v])
{
parent[v] = u;
dist[v] = dist[u] + graph[u][v];
}
}
printSolution(dist, roomCount, parent);
}
}
【问题讨论】:
标签: java android dijkstra shortest-path adjacency-matrix