朴素的dijk
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,v[1111111],dis[1111111],head[1111111],tot;
struct erwt{
int ne,to,wi;
}e[1111111];
void add(int u,int v,int t)
{
e[tot].to=v;
e[tot].wi=t;
e[tot].ne=head[u];
head[u]=tot++;
}
int dijk(int st,int mb)
{
int shu,zhi;
memset(dis,5,sizeof dis);
memset(v,0,sizeof v);
dis[st]=0;
while(true)
{
shu=0,zhi=99999999;
for(int j=1;j<=n;j++)
{
if(v[j]==0&&dis[j]<zhi)
{
shu=j;
zhi=dis[j];
}
}
if(zhi==99999999) break;
v[shu]=1;
for(int j=head[shu];j!=-1;j=e[j].ne)
{
dis[e[j].to]=min(dis[e[j].to],dis[shu]+e[j].wi);
}
}
return dis[mb];
}
int main()
{
memset(e,-1,sizeof(e));
memset(head,-1,sizeof(head));
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
int u,v,t;
scanf("%d%d%d",&u,&v,&t);
add(u,v,t);
add(v,u,t);
}
printf("%d\n",dijk(1,n));
}
堆优化dijk,用stl的优先队列的是garbage 。
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,v[1111111],dis[1111111],head[1111111],tot,h[1111111],hh,hi[1111111];
struct erwt{
int ne,to,wi;
}e[1111111];
void add(int u,int v,int t)
{
e[tot].to=v;
e[tot]