关于最短路径??

nandizhu 2009-02-07 06:02:03
求0点到n-1点的最短距离(不存在负权边)

帮我看看我的代码有什么问题吗???我是按照Dijstra的算法写的

#include <iostream>
using namespace std;
struct Graph
{
int **dis;
int number;
};
int f(Graph &G)
{
int min=-1;
int *visit=new int[G.number]; //访问标记
for (int i=0;i<=G.number-1;++i)
{
visit[i]=0;
}
while(min!=G.number-1)
{
min=-1;
for (int i=1;i<=G.number-1;++i)
{
if (visit[i]==0)
{
if (min==-1)
{
min=i;
}
else if(G.dis[0][i]<G.dis[0][min])
{
min=i;
}
else
;
}
}
visit[min]=1;
for (int i=1;i<=G.number-1;++i)
{
if (visit[i]==0&&G.dis[0][i]>G.dis[min][i]+G.dis[0][min])
{
G.dis[0][i]=G.dis[min][i]+G.dis[0][min];
G.dis[i][0]=G.dis[min][i]+G.dis[0][min];
}
}
}
return G.dis[0][G.number-1];
}

int main()
{
Graph G;
cin>>G.number;
G.dis=new int*[G.number];
for (int i=0;i<=G.number-1;++i)
{
G.dis[i]=new int[G.number];
}
for (int i=0;i<=G.number-1;++i)
{
for (int j=0;j<=G.number-1;++j)
{
cin>>G.dis[i][j];
}
}
cout<<f(G);
system("pause");
return 0;
}
...全文
67 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nandizhu 2009-02-09
  • 打赏
  • 举报
回复
描述


今天是周末,MM想回家休息,当然GG自然就成了护花使者^_^

小镇上共有N个路口,学校在路口1旁,MM的家在路口N,路口之间有道路相连.GG希望早点送MM到家(那样他可以在家里多坐会。。。),所以他希望回家的路径最短。这需要你的帮助。


输入

多组数据。对于每组数据,第一行为一个整数,N(1<=N<=100)。接下来N行每行N个整数,第 i 行第 j 个数表示路口i和路口j之间的距离。

输出


对于每组数据,输出一个整数,从路口1到路口N的最短路径。


样例输入

3
0 2 10
2 0 1
10 1 0

样例输出

3

提示

最短路

绿色夹克衫 2009-02-09
  • 打赏
  • 举报
回复
能说一下具体是什么问题么?
绿色夹克衫 2009-02-09
  • 打赏
  • 举报
回复
这个问题挺怪的,用Dijkstra肯定可以,而且比较简单,就是不知道LZ具体是什么错误,算出来的结果不对么?

实在不行,先把0换成一个很大的数试一下!我倒是有个自己用C#的红黑树写的Dijkstra,不过感觉把问题搞复杂了!

[Quote=引用 8 楼 nandizhu 的回复:]
。。。。。。那是机器出问题了哇~??~谢谢了~~~~~可能只能用floyd来算了。。。。
[/Quote]
nandizhu 2009-02-09
  • 打赏
  • 举报
回复
。。。。。。那是机器出问题了哇~??~谢谢了~~~~~可能只能用floyd来算了。。。。
绿色夹克衫 2009-02-09
  • 打赏
  • 举报
回复
仔细又看了一遍,也不是0的问题,怎么看都觉得程序是对的,我改成c#测了一遍,结果好像也是对的!
nandizhu 2009-02-09
  • 打赏
  • 举报
回复
在哪加呢??
绿色夹克衫 2009-02-09
  • 打赏
  • 举报
回复
可能是0造成的吧!
加一个不等于0的判断可能行!

0 2 10
2 0 1
10 1 0
nandizhu 2009-02-08
  • 打赏
  • 举报
回复
假设每个节点都两两相连。。。。无向图
绿色夹克衫 2009-02-07
  • 打赏
  • 举报
回复
看别人的代码却是不容易,没发现啥大问题呀!

G.dis[0][i]=G.dis[min][i]+G.dis[0][min];
G.dis[i][0]=G.dis[min][i]+G.dis[0][min];

是无向图么?否则0->i未必等于i->0

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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