Vir*_*rat 4 java algorithm graph
我在将包含无效点和有效点的给定二维矩阵转换为只有有效节点的图形时遇到问题。问题是这样的。我有一个二维矩阵
# # # # #
# . C C #
# S # # #
# . . E #
# # # # #
Run Code Online (Sandbox Code Playgroud)
我想找到从 S 到 E 的最短距离,记住我必须覆盖所有的 'C' 和 '#' 作为一堵墙和 '.' 充当自由路径。现在我想将此矩阵转换为仅包含有效节点的图形。请帮帮我。
n = number of nodes
for i=1 to n: for j=1 to n: d[i][j]=INF
for k=1 to n:
for i=1 to n:
for j=1 to n:
d[i][j] = min(d[i][j], d[i][k] + d[k][j])
shortest = INF
for each permutation a[1],a[2],...a[k] of the 'mustpass' nodes:
shortest = min(shortest, d['start'][a[1]]+d[a[1]][a[2]]+...+d[a[k]]['end'])
print shortest
Run Code Online (Sandbox Code Playgroud)
小智 0
我要么创建一个节点结构,要么创建一个节点类。例如:
struct Node {
node type; //Indicate in some way if the node is a 'S', '.' or 'E'
std::vector<Node> adjacentNodes;
}
Run Code Online (Sandbox Code Playgroud)
至于填充这个数据结构,我将从“S”块开始。并进行类似于以下的递归调用:
Set alreadyVisited;
FillGraph(i,j,Node){
// for all adjacent nodes, add them to Node's adjacentNodes.
// add Node to alreadyVisited Set
// for each of the adjacentNodes (i.e. any neighbor that isn't a wall.
// if(adjacentNode is not in alreadyVisited)
// FillGraph(adjaent-i, adjacent-j, adjacentNode);
}
Run Code Online (Sandbox Code Playgroud)