输入格式:第一行是两个以空格符分隔的整数n和m;接下来的第二行到第m+1行,每行包含4个以空格分开的元素x,y,w和d来描述一条道路,其中x和y是一条长度为w的道路相连的两个农场的编号,d是字符N.E.S.或W,表示从x到y的道路的方向。 输出格式:给出最远的一对农场之间距离的整数。
时间: 2024-03-02 22:51:08 浏览: 64
这是一个求解图中最长路径的问题,可以使用 Floyd 算法或者 Dijkstra 算法来解决。以下是使用 Floyd 算法的示例代码:
```python
n, m = map(int, input().split())
INF = float('inf')
dist = [[INF] * n for _ in range(n)]
for i in range(m):
x, y, w, d = input().split()
x, y, w = int(x) - 1, int(y) - 1, int(w)
if d == 'N':
dist[x][y] = min(dist[x][y], w)
dist[y][x] = min(dist[y][x], w)
elif d == 'E':
dist[x][y] = min(dist[x][y], w)
elif d == 'S':
dist[y][x] = min(dist[y][x], w)
else:
dist[y][x] = min(dist[y][x], w)
for k in range(n):
for i in range(n):
for j in range(n):
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
ans = 0
for i in range(n):
for j in range(n):
if dist[i][j] != INF:
ans = max(ans, dist[i][j])
print(ans)
```
该算法的时间复杂度为 $O(n^3)$,可以通过此题。
阅读全文