假设我们有一个n x n棋盘(换句话说就是矩阵),每个方格都有一个权重。一件可以水平或垂直移动,但不能沿对角线移动。每次移动的费用将等于棋盘上两个方格的差异。使用算法,我想找到一个棋子从正方形(1,1)移动到方形(n,n)的最低成本,它在多项式时间内具有最坏情况的时间复杂度。
可以使用dikstras算法来解决这个问题吗?我的算法下面能解决这个问题吗? Diijkstras已经可以在多项式时间内运行了,但是什么使它成为时间的复杂性?
伪代码:
我们有一些空集S,一些整数V,并输入一个未加权的图。之后我们完成一个邻接矩阵,显示没有无限加权顶点的边的成本,而矩阵没有选中所有顶点,我们找到一个顶点,如果平方值小于我们当前所在的平方,移动到那个方块并用两个方块之间的差异更新V并更新S标记已访问过的每个顶点。我们执行此过程,直到没有更多顶点。
感谢。
答案 0 :(得分:1)
由于您正在尝试查找最低成本路径,因此可以使用Dijkstra来实现此目的。由于Dijkstra在最坏的情况下是O(|E| + |V|log|V|)
,其中E
是边数,V
是图中的顶点数,这满足了多项式时间复杂度要求。
但是,如果您的算法仅考虑与移动的开始和结束方格相关的成本,而不考虑与中间节点相关的成本,则必须将所有可能的开始和结束方块连接在一起,以便您可以采用"切割"围绕中间节点。