EOJ 1028 路由器 floyd

来源:互联网 发布:mongodb 删除数据库 编辑:程序博客网 时间:2024/06/12 22:15

如题floyd算法

代码如下:

#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <map> using namespace std;const int maxn = 105;const int INF = 0x3f3f3f3f;int G[maxn][maxn], d[maxn][maxn];map<string, int> ma;int n, m, cnt; void floyd(){    for (int k = 1; k <= cnt; k++)        for (int i = 1; i <= cnt; i++)            for (int j = 1; j <= cnt; j++)            d[i][j] = min(d[i][j], d[i][k] + d[k][j]);} int main(){    //freopen("1.txt", "r", stdin);    scanf("%d%d", &n, &m);    memset(G, -1, sizeof(G));    memset(d, INF, sizeof(d));    string u, v;    int dis;    cnt = 0;    for (int i = 0; i < m; i++){        cin >> u >> v >> dis;        if (!ma.count(u))            ma[u] = ++cnt;        if (!ma.count(v))            ma[v] = ++cnt;        int x = ma[u], y = ma[v];        G[x][y] = G[y][x] = dis;        d[x][y] = d[y][x] = dis;        d[x][x] = d[y][y] = 0;    }     floyd();     int q;    scanf("%d", &q);    string q1, q2;    for (int i = 0; i < q; i++){        cin >> q1 >> q2;        int x = ma[q1];        int y = ma[q2];        if (d[x][y] == INF) printf("-1\n");        else printf("%d\n", d[x][y]);    }    return 0;}


0 0
原创粉丝点击