LIGHTOJ 1174 – COMMANDOS 【FLOYD】

来源:互联网 发布:lcd字库生成软件 编辑:程序博客网 时间:2024/05/20 17:10

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1174

题意:很多人从起点出发走过所有城市后,在终点汇聚所需的最短时间。

利用floyd。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <queue>using namespace std;const int inf = 10000000;int t;int p[110][110];int n, m;void init(int n){    for (int i = 0; i <= n; i++)    {        p[i][i] = 0;        for (int j = i + 1; j <= n; j++)            p[i][j] = p[j][i] = inf;    }}void floyd(int n){    for (int k = 0; k < n; k++)        for (int i = 0; i < n; i++)            for (int j = 0; j < n; j++)            {                if (p[i][k] + p[k][j] < p[i][j] && p[i][k]!=inf && p[k][j] !=inf)                    p[i][j] = p[i][k] + p[k][j];            }}int main(){    scanf("%d",&t);    int a, b, c;    for (int k = 1; k <= t; k++)    {        scanf("%d%d", &n, &m);         init(n);        while (m--)        {            scanf("%d%d",&a,&b);            p[a][b] = p[b][a] = 1;        }        floyd(n);        int s, e;        scanf("%d%d",&s,&e);        int ans = -inf;        for (int i = 0; i < n; i++)        {            if (p[s][i] != inf && p[i][e] != inf)                ans = max(ans,p[s][i] + p[i][e]);        }        printf("Case %d: %d\n", k, ans);    }    return 0;}
0 0