最短路之弗洛伊德算法

弗洛伊德算法:算法

大意:數組

        直接利用for循環鏈接距離並篩選最短的,簡單粗暴spa

例題:ip

  

Descriptionstring

在每一年的校賽裏,全部進入決賽的同窗都會得到一件很漂亮的t-shirt。可是每當咱們的工做人員把上百件的衣服從商店運回到賽場的時候,倒是很是累的!因此如今他們想要尋找最短的從商店到賽場的路線,你能夠幫助他們嗎?io


 
Inputfor循環

輸入包括多組數據。每組數據第一行是兩個整數N、M(N<=100,M<=10000),N表示成都的大街上有幾個路口,標號爲1的路口是商店所在地,標號爲N的路口是賽場所在地,M則表示在成都有幾條路。N=M=0表示輸入結束。接下來M行,每行包括3個整數A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A與路口B之間有一條路,咱們的工做人員須要C分鐘的時間走過這條路。
輸入保證至少存在1條商店到賽場的路線。循環

 
Output數據

對於每組輸入,輸出一行,表示工做人員從商店走到賽場的最短期
 
Sample Input算法複雜度

2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output

 

 

#include<stdio.h>#include<string.h>int INF=0x3f3f3f3f;//較大值表示連個路口沒路int dis[110][110];int main(){    int i,j,k,n,m,p,q,s;    while(scanf("%d%d",&n,&m)!=EOF)    {        if(m==0&&n==0)            break;        for (i=1;i<=n;i++)//初始化        {            for(j=1;j<=n;j++)            {                dis[i][j]=INF;            }        }        for (i=0;i<m;i++)        {            scanf("%d%d%d",&p,&q,&s);            dis[p][q]=dis[q][p]=s;//二維數組存連通的兩個路口        }        for (k=1;k<=n;k++)        {            for (i=1;i<=n;i++)            {                for (j=1;j<=n;j++)                {                    if (dis[i][j]>dis[i][k]+dis[k][j])//直接篩選替換  簡單粗暴                    {                        dis[i][j]=dis[i][k]+dis[k][j];                    }                }            }        }        printf("%d\n",dis[1][n]);    }    return 0;}因而可知此算法複雜度爲O(n^3);但較前者實現起來簡單好用

相關文章
相關標籤/搜索