Think:
1知识点:最短路_spfa()算法
2反思:memset()初始化函数注意第三个参数不要传错
以下为Accepted代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1e2 + 4;
int n, e[N][N], dis[N], vis[N];
void spfa();
int main(){
int i, j, w, mav;
char st[14];
while(~scanf("%d", &n)){
getchar();
mav = 0;
memset(e, inf, sizeof(e));/*参数不要传错*/
for(i = 1; i <= n; i++)
e[i][i] = 0;
for(i = 2; i <= n; i++){
for(j = 1; j < i; j++){
scanf("%s", st);
if(st[0] != 'x'){
sscanf(st, "%d", &w);
e[i][j] = e[j][i] = w;
}
}
}
spfa();
for(i = 1; i <= n; i++){
mav = max(mav, dis[i]);
}
printf("%d\n", mav);
}
return 0;
}
void spfa(){
queue <int> q;
memset(dis, inf, sizeof(dis));
memset(vis, 0, sizeof(vis));
dis[1] = 0, vis[1] = 1;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = 1; i <= n; i++){
if(dis[u] + e[u][i] < dis[i]){
dis[i] = dis[u] + e[u][i];
if(!vis[i]){
vis[i] = 1;
q.push(i);
}
}
}
}
}