前向星存图,spfa算法,应该是比较水的模板题
前向星就是利用数组模拟链表啦
head 头指针保存以某节点为始点的链头下标
next指向另一条相同始结点的结点下标
to保存该边终结点的结点值
weight保存该边权值
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
void add(int,int,int);
struct node{
int next;
int to;
int weight;
};node aa[200000];
int cnt=1;
int head[20100];
int ans[20100];
int main()
{
int n,m;
int nn,v,w;
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>nn>>v>>w;
add(nn,v,w);
}
queue<int>q;
q.push(1);
for(int i=1;i<=n;i++)
{
if(i==1)
ans[i]=0;
else ans[i]=INT_MAX;
}
int t;
while(!q.empty())
{
int item=q.front();
q.pop();
t=head[item];
while(t!=0)
{
if((aa[t].weight+ans[item])<ans[aa[t].to])
{
q.push(aa[t].to);
ans[aa[t].to]=aa[t].weight+ans[item];
}
t=aa[t].next;
}
}
for(int i=2;i<=n;i++)
cout<<ans[i]<<endl;
}
void add(int n,int v,int w)
{
aa[cnt].to=v;
aa[cnt].next=head[n];
head[n]=cnt;
aa[cnt].weight=w;
cnt++;
}
今天很想唱歌,想在郊外大声歌唱
我曾经也想过一了百了
潘虹小姐姐实在是唱得太有感觉了。