在網絡中,發送一個包需要知道對方的物理地址,當不知道物理地趣的時候,就要向網絡中廣播發送對方的IP地址,然後每一臺計算會收到這個廣播,如果IP和自己的計算對上,就把自己的物理地址發送出去。
現在有n臺計算,編號從1到n,現在1號計算向網絡中發送廣播,問經過多少時間後所有的計算機都會收到這個廣播。
輸入的網絡保證所有的計算機之間是可以相互通信的。
Input
單組測試數據。 第一行有一個整數n(1 <= n <= 100)。 接下來輸入一個鄰接矩陣A,A的大小是n x n。裏面的元素要麼是一個非負整數,或者是一個字符x。如果Aiijj是x那麼第i臺計算機和第j臺計算機沒有直接相連。否則表示信號在第i臺計算機和第j臺計算機之間傳播需要Aiijj的時間。 自己發給自己是不需要時間的所以對於所有的 1 <= i <= n,Aiiii = 0。輸入的網絡是一個無向圖,所以Aiijj = Ajjii。那麼只需要輸入矩陣的下三角部分即可。 那麼接下來給出n-1行, 第一行有一個整數表示A2211。 第二行有兩個整數表示A3311和A3322。 。。。 第n-1行有n-1個整數Ann11,Ann22, Ann33... Annn−1n−1。 0<=Aiijj<=100。
Output
輸出一個整數表示答案。
Sample Input
樣例輸入1
5
50
30 5
100 20 50
10 x x 10
Sample Output
樣例輸出1
35
思路:最短路徑裏面查找最大數據量即可;字符串與整數數據類型的轉化atio()函數;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
const int maxa=1e2+10;
const int inf=0x3f3f3f3f;
int n,ans;
int cost[maxa][maxa],mincost[maxa],used[maxa];
void folyd(){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cost[i][j]=min(cost[i][j],cost[i][k]+cost[k][j]);
for(int i=2;i<=n;i++)
ans=max(ans,cost[1][i]);
printf("%d\n",ans);
}
void init(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j) cost[i][j]=0;
else cost[i][j]=inf;
}
int main(){
while(~scanf("%d",&n)){
init();
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++){
char costa[5];
scanf("%s",costa);
if(!strcmp(costa,"x")) cost[i][j]=cost[j][i]=inf;
else cost[i][j]=cost[j][i]=atoi(costa);;
}
folyd();
}
return 0;
}