由于昨天没有更到足够数量的博客,今天又不能拖更。所以我选择来更一篇板子聊表心意
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int q = 2e4 + 3;
bool v[q];
long long d[q],minn;
int n,m,s;
struct node{
int z,val,nex;
}e[50*q];
int h[q];
int cnt = 0;
int add(int a,int b,int c)
{
cnt++;
e[cnt].z = b;
e[cnt].val = c;
e[cnt].nex = h[a];
h[a] = cnt;
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i = 1;i <= n;i++)d[i] = 2147483647;
for(int i = 1;i <= m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
d[s] = 0;
int t = s;
while(v[t] == false)
{
v[t] = true;
for(int i = h[t];i != 0;i = e[i].nex)
{
if(v[e[i].z] == false && d[e[i].z] > d[t] + e[i].val)
{
d[e[i].z] = d[t] + e[i].val;
}
}
minn = 2147483647;
for(int i = 1;i <= n;i++)
{
if(v[i] == false && minn > d[i])
{
minn = d[i];
t = i;
}
}
}
for(int i = 1;i <= n;i++)printf("%lld ",d[i]);
return 0;
}
//至于为什么不能有负边权呢?那是因为这个算法只能看到当前这一步中离被访问点最近的点,如果加上了负边权,那么下一步中含负边权的情况下就有可能会比按照这种垃圾算法算出的最小值小
好极了,这样又可以水一篇博客了