| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴代码,飘过~#include <iostream>
#include <memory.h>
#include <stdio.h>
#include <string.h>
#define MAX 0x7ffffff
using namespace std;
int map[105][105];
int vis[105];
int dist[105];
void init(int n)
{
int i,j;
for(i = 1;i <= n;i++)
for(j = 1;j <= n;j++)
map[i][j] = MAX;
memset(vis,0,sizeof(vis));
}
int sturnd(char ch[])
{
int sum = 0;
int cs = strlen(ch);
for(int i = 0;i < cs;i++)
{
sum *= 10;
sum += (ch[i] - 48);
}
return sum;
}
int findMin(int n)
{
int i,min = MAX,minNode = 0;
for(i = 1;i <= n;i++)
if(!vis[i] && dist[i] < min)
{
minNode = i;
min = dist[i];
}
return minNode;
}
void dis(int n)
{
int i,vnum,node;
memset(vis,0,sizeof(vis));
for(i = 1;i <= n;i++) dist[i] = map[1][i];
vis[1] = 1;
vnum = 1;
while(vnum < n)
{
node = findMin(n);
if(node)
{
vis[node] = 1;
vnum ++;
for(i = 1;i <= n;i++)
if(!vis[i] && dist[node] + map[node][i] < dist[i])
dist[i] = dist[node] + map[node][i];
}
else break;
}
}
int findMax(int n)
{
int i,max = -1;
for(i = 1;i <= n;i++)
if(dist[i] != MAX && dist[i] > max)
max = dist[i];
return max;
}
int main()
{
int n,i,j;
char ch[100];
cin >> n;
init(n);
for(i = 2;i <= n;i++)
for(j = 1;j < i;j++)
{
cin >> ch;
if(ch[0] == 'x') map[i][j] = MAX;
else map[i][j] = map[j][i] = sturnd(ch);
}
dis(n);
cout << findMax(n) << endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator