最短路
View Code
#include
<
iostream
>
#include < cstdio >
#include < cstdlib >
#include < cstring >
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 105
int vis[maxn];
int cost[maxn][maxn];
int lowcost[maxn];
int n;
void dijkstra( int beg)
{
int i, j, min;
memset(vis, 0 , sizeof (vis));
vis[beg] = 1 ;
for (i = 0 ; i < n; i ++ )
lowcost[i] = cost[beg][i];
lowcost[beg] = 0 ;
int pre = beg;
for (i = 1 ; i < n; i ++ )
{
min = inf;
for (j = 0 ; j < n; j ++ )
if (vis[j] == 0 && lowcost[pre] + cost[pre][j] < lowcost[j])
lowcost[j] = lowcost[pre] + cost[pre][j];
for (j = 0 ; j < n; j ++ )
if (vis[j] == 0 && lowcost[j] < min)
{
min = lowcost[j];
pre = j;
}
vis[pre] = 1 ;
}
}
void input()
{
char st[ 100 ];
for ( int i = 1 ; i < n; i ++ )
for ( int j = 0 ; j < i; j ++ )
{
scanf( " %s " , st);
if (st[ 0 ] == ' x ' )
cost[i][j] = cost[j][i] = inf;
else
cost[i][j] = cost[j][i] = atoi(st);
}
}
int main()
{
// freopen("t.txt", "r", stdin);
scanf( " %d " , & n);
input();
dijkstra( 0 );
int ans = 0 ;
for ( int i = 0 ; i < n; i ++ )
ans = max(ans, lowcost[i]);
printf( " %d\n " , ans);
return 0 ;
}
#include < cstdio >
#include < cstdlib >
#include < cstring >
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 105
int vis[maxn];
int cost[maxn][maxn];
int lowcost[maxn];
int n;
void dijkstra( int beg)
{
int i, j, min;
memset(vis, 0 , sizeof (vis));
vis[beg] = 1 ;
for (i = 0 ; i < n; i ++ )
lowcost[i] = cost[beg][i];
lowcost[beg] = 0 ;
int pre = beg;
for (i = 1 ; i < n; i ++ )
{
min = inf;
for (j = 0 ; j < n; j ++ )
if (vis[j] == 0 && lowcost[pre] + cost[pre][j] < lowcost[j])
lowcost[j] = lowcost[pre] + cost[pre][j];
for (j = 0 ; j < n; j ++ )
if (vis[j] == 0 && lowcost[j] < min)
{
min = lowcost[j];
pre = j;
}
vis[pre] = 1 ;
}
}
void input()
{
char st[ 100 ];
for ( int i = 1 ; i < n; i ++ )
for ( int j = 0 ; j < i; j ++ )
{
scanf( " %s " , st);
if (st[ 0 ] == ' x ' )
cost[i][j] = cost[j][i] = inf;
else
cost[i][j] = cost[j][i] = atoi(st);
}
}
int main()
{
// freopen("t.txt", "r", stdin);
scanf( " %d " , & n);
input();
dijkstra( 0 );
int ans = 0 ;
for ( int i = 0 ; i < n; i ++ )
ans = max(ans, lowcost[i]);
printf( " %d\n " , ans);
return 0 ;
}