杭电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\n",cost[t]);

else

  printf("-1\n");

}

return 0;

}



你可能感兴趣的:(最短路径)