关于Dijkstra算法求最长路的问题

dqdx_zch 2010-05-15 12:15:29
Dijkstra算法把权值都给成负值的话,是不是就是求最长路?

我认为是,但是算法给出的结果不对,求高人指点下怎么求最长路问题?
...全文
534 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqdx_zch 2010-05-15
  • 打赏
  • 举报
回复
up
请教高手要改哪里呢?
某某9 2010-05-15
  • 打赏
  • 举报
回复
权值有负值的话,Dijkstra算法是行不通的
dqdx_zch 2010-05-15
  • 打赏
  • 举报
回复
声明一下,是在DAG里面做
我的算法是下面这个,和严蔚敏那本书里的差不多
要怎么改呢?
void ShortestPath_DIJ(MGraph G, int v0, PathMatrix &P, ShortPathTable &D)
{
int v, w, i, j, min;
int final[MAX_VERTEX_NUM];
for(v = 0; v < G.vexnum; ++v)
{
final[v] = 0;
D[v] = G.arcs[v0][v];
for(w = 0;w < G.vexnum; ++w)
{
P[v][w] = 0;
}
if(D[v] < 0x7fffffff)
{
P[v][v0] = P[v][v] = 1; //改动
}
}
D[v0] = 0;
final[v0] = 1;
for(i = 1; i < G.vexnum; ++i)
{
min = 0x7fffffff;
for(w = 0; w < G.vexnum; ++w)
{
if(!final[w] && D[w] < min)
{
v = w;
min = D[w];
}
}
final[v] = 1;
for(w = 0; w < G.vexnum; ++w)
{
if(!final[w] && min < 0x7fffffff && G.arcs[v][w] < 0x7fffffff && (min + G.arcs[v][w] < D[w]))
{
D[w] = min + G.arcs[v][w];
for(j = 0;j < G.vexnum; ++j)
{
P[w][j] = P[v][j];
}
P[w][w] = 1;
}
}
}
}
baihacker 2010-05-15
  • 打赏
  • 举报
回复
貌似最长路是NPC问题。
AlanBruce 2010-05-15
  • 打赏
  • 举报
回复
http://hi.baidu.com/chin/blog/item/93aed933e6772443ad4b5f88.html
AlanBruce 2010-05-15
  • 打赏
  • 举报
回复
UP

UP
wade_2003 2010-05-15
  • 打赏
  • 举报
回复
帮顶~~~~~~~~~~
dqdx_zch 2010-05-15
  • 打赏
  • 举报
回复
在顶起来,Dijkstra算法用负权能算出最长路吗?
算法导论上说不能是负的,但是能否通过小改一下算法,就能算最长路了呢?
dqdx_zch 2010-05-15
  • 打赏
  • 举报
回复
upupupupupupupup,找高手指点下啊

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧