做的第一个SPFA
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct stu
{
int x,y;
double z;
}a[100010];
int b[10010],first[10010],next[100010];
double dis[100010];
int main()
{
int n,m,nn,xx,yy;
double zz;
scanf("%d",&nn);
queue<int >q;
while(nn--)
{
memset(first ,-1,sizeof(first));
memset(b,0,sizeof(b));
memset(dis,0,sizeof(dis));
int i,j=0,k;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%lf",&xx,&yy,&zz);
zz/=100;
a[++j].x=xx;
a[++j].y=yy;
a[++j].z=zz;
next[j]=first[a[j].x];
first[a[i].x]=j;
a[++j].x=yy;
a[j].y=xx;
a[j].z=zz;
next[j]=first[a[j].x];
first[a[j].x]=j;
}
b[1]=1;
dis[1]=1;
q.push(1);
while(!q.empty())
{
k=first[q.front()];
b[q.front()]=0;
q.pop();
while(k!=-1)
{
if(dis[a[k].y]<dis[a[k].x]*a[k].z)
{
dis[a[k].y]=dis[a[k].x]*a[k].z;
if(!b[a[k].y])
{
q.push(a[k].y);
b[a[k].y]=1;
}
}
k=next[k];
}
}
printf("%.6lf\n",dis[n]*100);
}
}