zoukankan      html  css  js  c++  java
  • POJ 1847 Floyd_wshall算法

    前面用dijstra写过了。但是捏。数据很小。也可以用Floyd来写。

    注意题目里给出的是有向的权值。

    附代码:
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #define inf 0x1f1f1f1f
    using namespace std;

    int n, a, b;
    int num;
    int dis[210][210];
    int i, j, k;

    int main()
    {
        while (cin >> n >> a >> b)
        {
            memset(dis, inf, sizeof(dis));
            for (i=1; i<=n; ++i)
            {
                int t;
                cin >> num;
                if (num == 0) continue;
                cin >> t;
                dis[i][t] = 0;    // 默认指向是第一个。
                //dis[t][i] = 0;         // 单向的。给出的是从i到t的权值。
                for (j=2; j<=num; ++j)
                {
                   cin >> t;
                   //dis[t][i] = 1;
                   dis[i][t] = 1;
                }
            }
            for (k=1; k<=n; ++k)
            {
                for (i=1; i<=n; ++i)
                {
                    for (j=1; j<=n; ++j)
                    {
                        if (dis[i][j] > dis[i][k] + dis[k][j])
                        dis[i][j] = dis[i][k] + dis[k][j];
                    }
                }
            }
            if (dis[a][b] != inf)
            cout << dis[a][b] << endl;
            else cout << -1 << endl;
        }
        return 0;
    }

  • 相关阅读:
    C语言II作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I博客作业12—学期总结
    第一次作业
    C语言I博客作业02
    C语言I博客作业11
    C语言||作业01
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4586595.html
Copyright © 2011-2022 走看看