java - 将二维矩阵转换为图形

标签 java algorithm graph

我在将包含无效点和有效点的给定二维矩阵转换为仅包含有效节点的图形时遇到问题。问题是这样的。 我有一个像

这样的二维矩阵
# # # # #
# . C C #
# S # # #
# . . E #
# # # # # 

我想找到从 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

最佳答案

字符的二维矩阵是该问题的完美图形表示。

每个矩阵元素 (i,j) 都是一个节点。假设你只能向东、西、北、南步进,从这个节点到它的邻居(i+or-1,j+or-1)存在 0 到 4 条无向边,这是通过简单地测试每个位置的字符来确定的。

您还可以测试超出范围(负数或太大)的 i,j 值,但如果如您所示,边界周围总是有一堵“墙”,则不需要这样做。这堵墙用作sentinel .

构建通用结构来表示嵌入网格中的图形是浪费时间和内存。

关于java - 将二维矩阵转换为图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405165/

相关文章:

algorithm - 最少出行次数

java - 我需要了解这个 java 代码的语法

java - 如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?

javascript - 最小公倍数 : What is wrong with my code?

c++ - 实现数学公式时的溢出问题

algorithm - 检查给定网络流中是否存在单个最小割

java - 在源代码中保护密码/字符串

java - 无法重命名或删除文件实例

c# - 两组数据的交集

java - 需要一个支持自动布局的可视化java库