正题
这一题很明显就是n个点,m条边。求S点到T点的最短路径长度。
有dijkstra和SPFA两种做法。在这不多说。
代码<有评论我会考虑贴Dijkstra>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;
int t,c,ts,te;
struct edge{int y,c,next;};
edge s[12410];
int len=0;
struct node{int x,d;};
queue<node> f;
int h[5010];
int first[5010];
bool tf[5010];
void ins(int x,int y,int c)
{
len++;
s[len].y=y;s[len].next=first[x];first[x]=len;
s[len].c=c;
}
void SPFA(int st,int t)
{
f.push((node){st,0});
memset(h,63,sizeof(h));
h[st]=0;
while(!f.empty())
{
node x=f.front();
f.pop();
tf[x.x]=false;
for(int i=first[x.x];i!=0;i=s[i].next)
{
int y=s[i].y;
if(h[y]>h[x.x]+s[i].c)
{
h[y]=h[x.x]+s[i].c;
if(tf[y]==false)
{
tf[y]=true;
f.push((node){y,h[y]});
}
}
}
}
printf("%d",h[t]);
return ;
}
int main()
{
scanf("%d %d %d %d",&t,&c,&ts,&te);
for(int i=1;i<=c;i++)
{
int x,y,q;
scanf("%d %d %d",&x,&y,&q);
ins(x,y,q);
ins(y,x,q);
}
SPFA(ts,te);
}