#include <stdio.h>
#include <string.h>
#define MAX (100 + 10)
#define INF (1000000 + 10)
int nN, nM;
int nDis[MAX][MAX];
void SearchAll()
{
for (int k = 0; k < nN; ++k)
{
for (int i = 0; i < nN; ++i)
{
for (int j = 0; j < nN; ++j)
{
if (nDis[i][k] + nDis[k][j] < nDis[i][j])
{
nDis[i][j] = nDis[j][i] = nDis[i][k] + nDis[k][j];
}
}
}
}
}
int main()
{
while (scanf("%d%d", &nN, &nM) == 2)
{
for (int i = 0; i < nN; ++i)
{
for (int j = 0; j < nN; ++j)
{
if (i == j)
{
nDis[i][j] = 0;
}
else
{
nDis[i][j] = INF;
}
}
}
while (nM--)
{
int nX, nY, nK;
scanf("%d%d%d", &nX, &nY, &nK);
nDis[nX][nY] = nDis[nY][nX] = nK;
}
SearchAll();
bool bOk = false;
int nMin = 1 << 30;
for (int i = 0; i < nN; ++i)
{
int nTemp = 0;
int j = 0;
for ( ; j < nN; ++j)
{
if (i == j) continue;
if (nDis[i][j] == INF)
{
break;
}
else
{
if (nDis[i][j] > nTemp)
{
nTemp = nDis[i][j];
}
}
}
if (j == nN)
{
bOk = true;
if (nTemp < nMin)
{
nMin = nTemp;
}
}
}
if (bOk)
{
printf("%d\n", nMin);
}
else
{
printf("Can not\n");
}
}
return 0;
}
鍏充簬Floyd綆楁硶,鍙互榪欐牱鐞嗚В...姣斿鍒氬紑濮嬪彧鍙?涓粨鐐筰,j,瀹冧滑鐨勮窛紱諱竴瀹氭槸dis(i,j),浣嗘槸榪樻湁鍏跺畠緇撶偣,闇瑕佹妸鍏跺畠緇撶偣涔熸參鎱㈠姞榪涙潵,鎵浠ユ渶澶栧眰鍏充簬k鐨勫驚鐜剰鎬濆氨鏄粠0鑷硁N-1,鎶婃墍鏈夊叾瀹冪粨鐐瑰姞榪涙潵,姣斿鍔犲叆0鍙風(fēng)粨鐐瑰悗,璺濈dis(i,0)+dis(0,j)鍙兘浼?xì)姣攄is(i,j)灝?濡傛灉鏄繖鏍峰氨鏇存柊dis(i,j),鐒跺悗鍚庨潰鍔犲叆1鍙風(fēng)粨鐐圭殑鏃跺?瀹為檯涓婃槸鍦ㄥ凡緇忓姞鍏?鍙風(fēng)粨鐐圭殑鍩虹涓婅繘琛岀殑澶勭悊浜?鏁堟灉鍙樻垚dis(i,0,1,j),鍙兘鏄渶灝忕殑,鑰屼笖涓棿鐨?,1涔熷彲鑳芥槸涓嶅瓨鍦ㄧ殑,褰撶劧鏄湪dis(i,j)鍘熸湰灝辨槸鏈灝忕殑鎯呭喌涓?..
榪欎釜綆楁硶鍙互鐢ㄤ笅闈㈣繖涓浘鐗囨弿榪?..

瑙f硶3:
#include <stdio.h>
#include <string.h>
#define MAX (100 + 10)
#define INF (1000000 + 10)
int nN, nM;
int nDis[MAX][MAX];
void Search(int nSource)
{
bool bVisit[MAX];
memset(bVisit, false, sizeof(bVisit));
bVisit[nSource] = true;
for (int i = 0; i < nN - 1; ++i)
{
int nMin = INF;
int nMinPos = 0;
for (int j = 0; j < nN; ++j)
{
if (!bVisit[j] && nDis[nSource][j] < nMin)
{
nMin = nDis[nSource][j];
nMinPos = j;
}
}
if (bVisit[nMinPos] == false)
{
bVisit[nMinPos] = true;
for (int j = 0; j < nN; ++j)
{
if (nDis[nSource][nMinPos] + nDis[nMinPos][j] < nDis[nSource][j])
{
nDis[nSource][j] = nDis[nSource][nMinPos] + nDis[nMinPos][j];
}
}
}
}
}
void SearchAll()
{
for (int k = 0; k < nN; ++k)
{
Search(k);
}
}
int main()
{
while (scanf("%d%d", &nN, &nM) == 2)
{
for (int i = 0; i < nN; ++i)
{
for (int j = 0; j < nN; ++j)
{
if (i == j)
{
nDis[i][j] = 0;
}
else
{
nDis[i][j] = INF;
}
}
}
while (nM--)
{
int nX, nY, nK;
scanf("%d%d%d", &nX, &nY, &nK);
nDis[nX][nY] = nDis[nY][nX] = nK;
}
SearchAll();
bool bOk = false;
int nMin = 1 << 30;
for (int i = 0; i < nN; ++i)
{
int nTemp = 0;
int j = 0;
for ( ; j < nN; ++j)
{
if (i == j) continue;
if (nDis[i][j] == INF)
{
break;
}
else
{
if (nDis[i][j] > nTemp)
{
nTemp = nDis[i][j];
}
}
}
if (j == nN)
{
bOk = true;
if (nTemp < nMin)
{
nMin = nTemp;
}
}
}
if (bOk)
{
printf("%d\n", nMin);
}
else
{
printf("Can not\n");
}
}
return 0;
}
榪澃鏂壒鎷夌畻娉曠殑鏍稿績(jī)鎬濇兂鏄淮鎶や竴涓簮鐐歸《鐐歸泦鍚?浠諱綍鏈鐭礬寰勪竴瀹氭槸浠庤繖涓《鐐歸泦鍚堝彂鍑虹殑...
鍒濆鍖栨椂,榪欎釜闆嗗悎灝辨槸婧愮偣...
鎴戜滑浠庤鍏跺畠緇撶偣涓夊嚭涓涓粨鐐?璇ョ粨鐐瑰埌婧愮偣鐨勮窛紱繪渶灝?..
鏄劇劧,榪欎釜璺濈灝辨槸婧愮偣鍒拌緇撶偣鐨勬渶鐭窛紱諱簡(jiǎn),鎴戜滑宸茬粡鎵懼埌浜?jiǎn)绛旀鐨勪竴閮ㄥ垎浜?..鐒跺悗,鎴戜滑灝辨妸璇ョ粨鐐瑰姞鍏ュ墠闈㈡墍璇寸殑欏剁偣闆嗗悎...
鐜板湪欏剁偣闆嗗悎鏇存柊浜?鎴戜滑蹇呴』寰楁洿鏂拌窛紱諱簡(jiǎn)...鐢變簬鏂板姞鍏ョ殑緇撶偣鍙兘鍙戝嚭杈逛嬌寰楀師鏉ユ簮鐐瑰埌鏌愪簺緇撶偣鐨勮窛紱繪洿灝?涔熷氨鏄垜浠殑婧愮偣鍙樺ぇ浜?杈逛篃鍙樺浜?鎵浠ユ垜浠殑鏈鐭窛紱婚泦鍚堢殑鍊間篃蹇呴』鍙樺寲浜?..
璇ョ畻娉曚竴鐩村驚鐜痭N-1嬈?鐩磋嚦鎵鏈夌殑鐐歸兘鍔犲叆婧愮偣欏剁偣闆嗗悎...