最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20910 Accepted Submission(s): 8939
输入保证至少存在1条商店到赛场的路线。
#define DeBUG
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include<cassert>
#include<set>
#ifdef DeBUG
#define bug assert
#else
#define bug //
#endif
#define INF 10000000
using namespace std ;
int main()
{
#ifdef DeBUG
freopen("C:\Users\Sky\Desktop\1.in","r",stdin);
#endif
const int start=1;
int end;
int road[105][105];
int lowcost[105];
bool inQueue[105];
int n;
int i,j,k;
int maxn;
while(scanf("%d%d",&end,&n),end!=0&&n!=0)
{
queue<int>Q;
int maxroad=0;
for(i=1;i<=100;i++)//初始化
{
lowcost[i]=INF;
inQueue[i]=false;
for(j=1;j<=100;j++)
{
road[i][j]=INF;
}
}
for(i=1;i<=n;i++)//初始化图矩阵
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
road[b][a]=road[a][b]=c;
maxroad=max(max(maxroad,a),b);
}
lowcost[1]=0;
Q.push(start);
inQueue[start]=true;
while(!Q.empty())
{
int temp=Q.front();
for(i=2;i<=maxroad;i++)
{
if(i!=temp)
{
if(lowcost[temp]+road[temp][i]<lowcost[i])
{
lowcost[i]=lowcost[temp]+road[temp][i];
if(inQueue[i]==false)
{
Q.push(i);
inQueue[i]=true;
}
}
}
}
Q.pop();
inQueue[temp]=false;
}
printf("%d
",lowcost[end]);
}
return 0;
}