杭电1874最短路径问题

#include<stdio.h>
#include<string.h>
int arc[200][200];
int cost[200];
int INF=100000;
int n,s,t;
void spfa()
{
int x,i;
int q[200];
int visited[200];
int front=0;
int rear=0;
memset(q,0,sizeof(q));//模拟队列 
memset(visited,0,sizeof(visited));//开始所有的点都没有访问 
cost[s]=0;//开始点权值为0 
q[++rear]=s;//入队 
visited[s]=1;//开始点访问 
while(front!=rear)
{//
  front=(front+1)%(n+1);//出队 
  x=q[front];
  visited[x]=0;//
  for(i=0;i<n;i++)
    if(cost[x]+arc[x][i]<cost[i])//更新最短路 
{
cost[i]=arc[x][i]+cost[x];//
if(!visited[i])
{
rear=(rear+1)%(n+1);
q[rear]=i;
visited[i]=1;
}
} 
}
}
int main()
{
int m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j,k,d;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
 arc[i][j]=INF;
for(k=0;k<m;k++)
{
scanf("%d%d%d",&i,&j,&d);
if(arc[i][j]>d)
  arc[i][j]=arc[j][i]=d;
}
scanf("%d%d",&s,&t);
for(i=0;i<n;i++)
cost[i]=INF;
spfa();
if(cost[t]<INF)
  printf("%d
",cost[t]);
else
  printf("-1
");
}
return 0;
}



原文地址:https://www.cnblogs.com/aukle/p/3233842.html