#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,flag;
int dis[1001],fh[1001],d[100001],pd[1001][1001];
int et,head[20001],to[20001],c[20001],next[20001];
void insert(int u,int v,int w)
{
et++;
to[et]=v;
c[et]=w;
next[et]=head[u];
head[u]=et;
}
void spfa()
{
int t=0,w=1,p;
dis[1]=0;
d[0]=1;
fh[1]++;
while(t<w)
{
p=head[d[t]];
while(p!=0)
{
if(dis[d[t]]+c[p]<dis[to[p]])
{
dis[to[p]]=dis[d[t]]+c[p];
d[w++]=to[p];
fh[to[p]]++;
if(fh[to[p]]>n)
{
cout<<"No such path";
flag=1;
return;
}
}
p=next[p];
}
t++;
}
}
int main()
{
int x,y,a1,a2;
while(cin>>n>>m)
{
if(n==0&&m==0)break;
et=0,flag=0;
memset(fh,0,sizeof(fh));
memset(pd,0,sizeof(pd));
memset(next,0,sizeof(next));
memset(head,0,sizeof(head));
for(int i=1;i<=m;i++)
{
cin>>x>>y>>a1>>a2;
insert(x,y,a1);
insert(y,x,a2);
pd[x][y]=pd[y][x]=1;
}
for(int i=1;i<=n;i++)dis[i]=999999;
spfa();
if(!flag)
{
if(dis[n]==999999)cout<<"No such path";
else cout<<dis[n];
}
cout<<endl;
}
return 0;
}
codevs 2645 Spore SPFA c++
最新推荐文章于 2025-02-15 19:23:21 发布
本文介绍了一种基于图的最短路径算法——SPFA算法,并详细解释了其在C++中的实现方式。通过具体实例展示了如何使用SPFA算法来解决特定类型的最短路径问题,包括节点之间的双向边和不同权重。
3643

被折叠的 条评论
为什么被折叠?



