最短路
最近老是spfa打错,拿这道题练练手。
全裸最短路哦~
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct edge{
int next;
int to;
int dis;
};
int n,m,u,v,d,s,t,k;
int h[105],dis[105];
edge a[20005];
bool f[105];
int spfa(){
memset(dis,0x7f,sizeof(dis));
int b[100000];
int r=0,w=1;
dis[1]=0; b[1]=1; f[1]=true;
while (r<w){
int x=b[++r];
f[x]=false;
for (int i=h[x];i;i=a[i].next)
if (dis[a[i].to]>dis[x]+a[i].dis){
dis[a[i].to]=dis[x]+a[i].dis;
if (!f[a[i].to]){
b[++w]=a[i].to;
f[a[i].to]=true;
}
}
}
return dis[n];
}
void read(int x,int y,int z){
k++;
a[k].next=h[x];
a[k].to=y;
a[k].dis=z;
h[x]=k;
}
int main(){
while (scanf("%d%d",&n,&m)!=EOF){
if (n==0&&m==0) continue;
memset(f,false,sizeof(f));
memset(h,0,sizeof(h));
k=0;
for (int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&d);
read(u,v,d);
read(v,u,d);
}
//scanf("%d%d",&s,&t);
printf("%d\n",spfa());
}
return 0;
}