【发布时间】:2015-10-12 23:55:10
【问题描述】:
假设我们有一个 n x n 棋盘(或换句话说,一个矩阵),每个方格都有一个权重。一块可以水平或垂直移动,但不能沿对角线移动。每次移动的成本将等于棋盘上两个方格的差。使用一种算法,我想找到单个棋子从平方 (1,1) 移动到平方 (n,n) 的最小成本,这在多项式时间内具有最坏情况的时间复杂度。
可以使用 dikstras 算法来解决这个问题吗?我下面的算法能解决这个问题吗? Diijkstras 已经可以在多项式时间内运行,但它的时间复杂度是什么?
伪代码:
我们有一些空集 S,一些整数 V,并输入一个未加权的图。之后,我们完成了一个邻接矩阵,显示没有无穷大加权顶点的边的成本,虽然矩阵没有选择所有顶点,但我们找到了一个顶点,如果平方值小于我们当前所在的平方,移动到那个正方形并用两个正方形之间的差异更新 V 并更新 S 标记每个访问过的顶点。我们执行此过程,直到没有更多顶点为止。
谢谢。
【问题讨论】:
-
Could dikstras algorithm be used to solve this?假设差值取绝对值,那么是的 -
@svs 但是如果我想在多项式时间内使用它,我是否必须使用无向或有向实现?
-
没关系。时间复杂度是一样的
-
@svs 我知道这很难实现,但是什么会使这样的算法具有多项式时间的时间复杂度?
-
algorithm like this如果您谈论您的算法,我很难理解它。 Dijkstra 就足够了。您还可以使用动态编程来解决您的问题。复杂度为O(MN),其中MxN是您的电路板大小。
标签: algorithm matrix graph shortest-path chess