单源最短路径最快的用贝尔曼福特算法
稍微优化了一下
大概思路就是
先把所有点到一个点的距离定为无穷大
如果有直接到的就附初值
然后一个一个点看能否通过这个点使其他点到终点的路径减短
附上代码:
#include
#include
using namespace std;
struct note
{
int start;
int end;
int length;
};
int cmp(const note &a,const note &b)
{
if(a.start
b.start)
return 0;
if(a.end
head)
{
if(con[dui[head]]==0)
{
head++;
continue;
}
i=con[dui[head]];
while(que[i].start==dui[head])
{
if(dis[que[i].end]>dis[que[i].start]+que[i].length)
{
dis[que[i].end]=dis[que[i].start]+que[i].length;
if(book[que[i].end]==0)
{
dui[tail]=que[i].end;
book[dui[tail]]=1;
tail++;
}
}
i++;
}
book[dui[head]]=0;
head++;
}
for(i=1;i<=n;i++)
if(dis[i]==9999999)
printf("2147483647 ");
else
printf("%d ",dis[i]);
return 0;
}