タイトル
毎年恒例の学校の競争では、すべての学生のファイナリストは非常にいいTシャツを受け取ることになります。衣料品の作品の何百ものスタッフが店からスタジアムに戻って出荷された時はいつでもしかし、彼らは非常に疲れているとき!だから今、彼らはあなたがそれらを助けることができ、店舗からスタジアムへの最短ルートを見つけたいですか?
入力された
入力データの複数のセットを含みます。各二つの整数N、M(N <= 100の最初の行は 、M <= 10000)、NはN指定交差点、数通りの交差点成都、符号1は、交差点の位置を記憶することである表し競技場の場所があり、Mは、成都の選択肢のカップルを示しています。N = M = 0の入力の終了を示します。次のM行、三つの整数A、B、Cを含む各行(1 < = A、B <= N、1 <= C <= 1000) 、交点Aと交点Bとの間の経路があることを示し、我々 C-分の時間にスタッフの必要性は、この道を旅しました。
店舗への少なくとも一つのトラックの存在を確保するために、入力ライン。各入出力ラインに対する出力は、トラック労働者は店の最小時間から来る表しますサンプル入力
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
出力例
3 2
ほとんど短絡評価点、標準ダイクストラアルゴリズム。配列を初期化訪問することを忘れないでください。
コード:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int n,m,a[1000][1000];
int main()
{
int A,B,c,d[10100],visit[10100];
cin>>n>>m;
while (n!=0 && m!=0)
{
memset(a,0x3f,sizeof(a));
a[1][1]=0;
for (int i=1;i<=m;i++)
{
cin>>A>>B>>c;
a[A][B]=c;
a[B][A]=c;
}
for (int i=1;i<=n;i++)
d[i]=INF;
memset(visit,0,sizeof(visit));
d[1]=0;
for (int i=1;i<=n;i++)
{
int mi=INF,x=-1;
for (int j=1;j<=n;j++)
if (visit[j]==0 && d[j]<mi)
{
mi=d[j];
x=j;
}
if (x==-1) break;
visit[x]=1;
for (int j=1;j<=n;j++)
{
d[j]=min(d[j],d[x]+a[x][j]);
}
}
cout<<d[n]<<endl;
cin>>n>>m;
}
return 0;
}