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;
}

时间: 2024-11-10 01:33:48

POJ 1847 Floyd_wshall算法的相关文章

POJ 1847 dijstra算法

POJ 无限循环CE中.感觉是读题难.然后就可以建图上模板了. 附个人代码: #include<stdio.h>#include<string.h>#include<iostream>#define maxn 0x1f1f1f1f#define size 210using namespace std; int low[size];bool used[size];int map[size][size];int n, a, b; void init(){    for (i

POJ 1379 模拟退火算法

求规定平面上一点到已知点的最小距离最大的点. 模拟退火的流程是,随机构造几组解作为初始解空间,每次对当前解空间进行随机扩展,若发现更优解则替换. 进行的次数由参数人为控制,而随机扩展的幅度也是随着次数逐渐减小的. #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<cmath> #include<string> #include&

poj 1847 最短路简单题,dijkstra

1.poj  1847  Tram   最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个相邻点,可以改变指向.求一条从A到B的路,使用最少改变路上点的指向的次数. #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm>

POJ 1847 Tram 单源最短路径

题意:轨道网,有若干转换器,每个转换器都和其他若干转换器相连,转换器初始指向第一个与其相连的转换器.问要到达终点需要最少转换多少次? 思路:可以用dijkstra单源最短路来做,把轨道网看做有向图(因为1第一个指向2,2的第一个不一定指向1),当前转换器处始指向的那个转换器之间的路径权值为0,其他路径权值为1,求一次起点到终点的最短路,结果就是最少转换次数,注意可能没有路径,这时要输出-1 代码: /* poj 1847 264K 0MS */ #include<cstdio> #includ

POJ 2485(Kruskal算法)

第一道Kruskal算法题 #include <iostream>#include <algorithm>#include <cstdio>using namespace std;#define max 505int f[max],maxw;struct edge{    int st,en,w;}ed[max*max/2]; int  find(int k){    if(k!=f[k])f[k]=find(f[k]);    return f[k];}void co

POJ 1847 Tram 【最短路,spfa算法,题意理解是关键呀!!】

Tram Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13468   Accepted: 4954 Description Tram network in Zagreb consists of a number of intersections and rails connecting some of them. In every intersection there is a switch pointing to t

POJ 1797 kruskal 算法

题目链接:http://poj.org/problem?id=1797 开始题意理解错.不说题意了. 并不想做这个题,主要是想测试kruskal 模板和花式并查集的正确性. 已AC: /* 最小生成树 kruskal算法 过程:每次选取没有参与构造最小生成树并且加入之后不会构成回路的边中权值最小的一条 作为最小生成树的一条新边.直至选择了V-1条边. */ #include <stdio.h> #include <string.h> #include <iostream>

poj 1811, poj 2429 (pollard_rho算法)

poj 1811 题意: 给出一个整数n,判断n是不是素数,如果不是素数,输出最小的质因子. 限制: 2 <= N < 2^54 思路: miller_rabin算法判素数 pollard_rho算法求质因子 复杂度O(log(n)) poj 2429 题意: 给出两个数的lcm和gcd,求这两个数. 限制: 0 < lcm,gcd < 2^63 思路: pollard_rho O(log(n))分解质因数. 可以考虑到2^63不同的质因数只有20左右个,而相同的质数不可能分在不同

poj 1847( floyd &amp;&amp; spfa )

http://poj.org/problem?id=1847 一个水题,用来熟悉熟悉spfa和floyd的. 题意:有m条的铁路,要从x,到y, 之后分别就是条铁路与其他铁路的交点.第一个输入的为有n个交点.之后第一个输入的点,当前铁路到这个点是不要转向的,也就是权值为0,其余的权值都为1,求从x到y的最短路,如果到不了输出-1 裸的floyd和spfa: 1 #include <stdio.h> 2 #include <string.h> 3 #define inf 0x3f3f