求两条最短路的最大的那一条,啊啊啊啊啊, 没看清题目就直接下手,wa了好多次。。。。
#include<iostream>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 510;
int e[N][N], dis[N];
bool visit[N];
int n, m;
int dijkstra(){
fill(visit, visit + N, false);
fill(dis, dis + N, INF);
dis[1] = 0;
for(int i = 0; i < n; ++i){
int u = -1, minn = INF;
for(int j = 1; j <= n; ++j){
if(visit[j] == false && dis[j] < minn){
minn = dis[j];
u = j;
}
}
if(u == -1) break;
visit[u] = true;
for(int v = 1; v <= n; ++v){
if(visit[v] == false && dis[v] > dis[u] + e[u][v]){
dis[v] = dis[u] + e[u][v];
}
}
}
return dis[n];
}
int main(){
scanf("%d%d", &n, &m);
int a, b;
fill(e[0], e[0] + N * N, INF);
for(int i = 0; i < m; ++i){
scanf("%d%d", &a, &b);
e[a][b] = e[b][a] = 1;
}
int result = dijkstra();
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j)
if(e[i][j] == 1) e[i][j] = INF;
else e[i][j] = 1;
}
result = max(result, dijkstra());
if(result == INF)
result = -1;
printf("%d\n", result);
}