哪位高手能帮小弟我矩阵的一个点到另一个点的最短距离!多谢
谁能帮我求一个矩阵的一个点到另一个点的最短距离!谢谢!
如下面
3*3的矩阵
1 30 45
21 3 18
32 2 32
请问怎么才能求出点(0,0)到点(2,2)的最短距离
希望能给出代码
------解决方案--------------------
我提供一个简单的思路:
例如(a,b) 到点 (c,d).
可以证明,走过的路不能回头,那么的话就必须经过c-a步的横向的移动,以及d-b步纵向的移动才能到达目的坐标。
横向的移动和纵向的移动的相对顺序是不能确定的。可以看成是(c-a)+ (d-b)个元素的全排列。
这样就抽象成了 这明显可以 回溯法来进行解决。
在查找过程中,可以利用约束和限界函数来 缩小搜索范围。例如 记录已搜索路径的最小值,若当前路径的值大于最小值,那么该路径就不用搜索了。
------解决方案--------------------
相邻的点之间连一条边。。转化为一个图。。然后用Dijkstra算法求最短路。。
------解决方案--------------------
请看数据结构书 Dijkstra算法
------解决方案--------------------
建图有什么难的。。不就相邻的点连边。。好像(0,0)和(0,1),(1,0)两个点各连一条双向边。。记录经过的点你在Dijkstra松弛操作的时候记录就行了。。如果不清楚这个算法。。建议你看看数据结构的书。。
------解决方案--------------------
什么叫点自身的距离。。点到自己的距离肯定是0啊。。。
------解决方案--------------------
你可以求出最短路径之后。。再加上起点自身的权值的。。
------解决方案--------------------
3X3,把所有路径走一遍就可以了
00-01-02-12-22 ,列出所有可能的组合,重复也没关系
如下面
3*3的矩阵
1 30 45
21 3 18
32 2 32
请问怎么才能求出点(0,0)到点(2,2)的最短距离
希望能给出代码
------解决方案--------------------
我提供一个简单的思路:
例如(a,b) 到点 (c,d).
可以证明,走过的路不能回头,那么的话就必须经过c-a步的横向的移动,以及d-b步纵向的移动才能到达目的坐标。
横向的移动和纵向的移动的相对顺序是不能确定的。可以看成是(c-a)+ (d-b)个元素的全排列。
这样就抽象成了 这明显可以 回溯法来进行解决。
在查找过程中,可以利用约束和限界函数来 缩小搜索范围。例如 记录已搜索路径的最小值,若当前路径的值大于最小值,那么该路径就不用搜索了。
------解决方案--------------------
相邻的点之间连一条边。。转化为一个图。。然后用Dijkstra算法求最短路。。
------解决方案--------------------
请看数据结构书 Dijkstra算法
------解决方案--------------------
建图有什么难的。。不就相邻的点连边。。好像(0,0)和(0,1),(1,0)两个点各连一条双向边。。记录经过的点你在Dijkstra松弛操作的时候记录就行了。。如果不清楚这个算法。。建议你看看数据结构的书。。
------解决方案--------------------
相邻的点之间连一条边。。转化为一个图。。然后用Dijkstra算法求最短路。。
好像很难转换为图吧
那转换为图后,怎么才能记录经过的点
建图有什么难的。。不就相邻的点连边。。好像(0,0)和(0,1),(1,0)两个点各连一条双向边。。记录经过的点你在Dijkstra松弛操作的时候记录就行了。。如果不清楚这个算法。。建议你看看数据结构的书。。
如果建图怎么才能求点自身的距离呢?
什么叫点自身的距离。。点到自己的距离肯定是0啊。。。
------解决方案--------------------
相邻的点之间连一条边。。转化为一个图。。然后用Dijkstra算法求最短路。。
好像很难转换为图吧
那转换为图后,怎么才能记录经过的点
建图有什么难的。。不就相邻的点连边。。好像(0,0)和(0,1),(1,0)两个点各连一条双向边。。记录经过的点你在Dijkstra松弛操作的时候记录就行了。。如果不清楚这个算法。。建议你看看数据结构的书。。
如果建图怎么才能求点自身的距离呢?
什么叫点自身的距离。。点到自己的距离肯定是0啊。。。
可是你看这
3*3的矩阵
1 30 45
21 3 18
32 2 32
他的每个点都有值的
应该不能把他忽略吧。
比如要求怎么才能求呢
你可以求出最短路径之后。。再加上起点自身的权值的。。
------解决方案--------------------
3X3,把所有路径走一遍就可以了
00-01-02-12-22 ,列出所有可能的组合,重复也没关系