您的位置:首页 > 其它

【算法笔记】双调欧几里得旅行商问题

2015-03-03 13:06 337 查看
reference:

1)《算法导论》15-3

2)http://blog.sina.com.cn/s/blog_51cea4040100gkcq.html

将所有点按x坐标从小到大排序后(假设不存在重复)。从左至右标记为0, 1, 2…n-1

那么这问题的关键一个性质是,对于一点i(i > 0)和任意包含它的双调路径,i-1一定是i的前继或者后继。

如果我们假设一个环游的顺序,比如逆时针

f[i][j]f[i][j](i>j)表示从i到0,再从0到j

1)如果i-1是在(i, 0)上,f[i−1][j]f[i-1][j]已经求出来了,再加上(i, i-1)就行了

那么f[i][j]=f[i−1][j]+dist[i−1][i]f[i][j] = f[i-1][j]+dist[i-1][i]

2)如果i-1在(0, j)上,则j=i-1,否则不满足性质。

所以f[i][i−1]=min(f[i−1][k]+dist[k][i]),0<=k<i−1f[i][i-1] = min (f[i-1][k]+dist[k][i]), 0<=k(求最短的情况)

这意味着i向左走遇到的第一个点是k,然后走(k, 0),(0, i-1),这段路径就是f[i−1][k]f[i-1][k]

例题:

poj 2677
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: