POJ T1502 MPI Maelstrom
题目思路:
题目长,但思路简单,模板裸题,主要是接收X的字符串那里。如果怕麻烦,就直接调用 atoi() 这个函数,其他没什么好讲......
Dijkstra写法
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define maxn 105
#define INF 0x3f3f3f3f
using namespace std;
bool vis[maxn];
int map[maxn][maxn],dis[maxn],n;
void Init(){
for(int i = 1; i <= n; i++){
dis[i] = INF;
vis[i] = false;
for(int j = 1; j <= i; j++)
i == j ? map[i][j] = 0 : map[i][j] = map[j][i] = INF;
}
}
void Dijkstra(int s){
dis[s] = 0;
for(int i = 1; i <= n; i++){
int minn = INF,p = 0;
for(int j = 1; j <= n; j++){
if(!vis[j] && minn > dis[j]){
p = j;
minn = dis[j];
}
}
vis[p] = true;
for(int j=1; j <= n; j++){
if(!vis[j] && dis[j] > dis[p] + map[p][j]){
dis[j] = dis[p] + map[p][j];
}
}
}
}
int main(){
while(~scanf("%d",&n)){
Init();
for(int i = 1; i <= n; i++){
for(int j = 1; j < i; j++){
char s[10];
scanf("%s",s);
if(s[0] != 'x') map[i][j] = map[j][i] = atoi(s);
}
}
Dijkstra(1);
int ans = -1;
for(int i = 2; i <= n; i++)
if(dis[i] > ans)
ans = dis[i];
printf("%d\n",ans);
}
return 0;
}