UVA - 567 Risk(Floyd)

题目链接

题目大意:有20个城市,输入给19行,每行先给有几个数,然后接着给出这几个数,代表的是后面的城市编号和行编号(城市编号)有一条边,每条边的权值为1.接着m个查询任意两个城市之间的最短距离。

解题思路:求任意两个顶点之间的距离,用floyd。

代码:

#include <cstdio>

const int maxn = 21;
const int INF = 0x3f3f3f3f;

int G[maxn][maxn];

void Floyd () {

    for (int k = 1; k < maxn; k++)
        for (int i = 1; i < maxn; i++)
            for (int j = 1; j < maxn; j++)
                if (G[i][j] > G[i][k] + G[k][j])
                    G[i][j] = G[j][i] = G[i][k] + G[k][j];
}

int main () {

    int n, m, u, v, cas = 0;

    while (scanf ("%d", &n) != EOF) {

        for (int i = 1; i < maxn; i++)
            for (int j = 1; j < maxn; j++)
                G[i][j] = (i == j) ? 0 : INF;

        for (int i = 0; i < n; i++) {
            scanf ("%d", &v);
            G[1][v] = G[v][1] = 1;
        }

        for (int i = 2; i < 20; i++) {
            scanf ("%d", &n);
            for (int j = 0; j < n; j++) {
                scanf ("%d", &v);
                G[i][v] = G[v][i] = 1;
            }
        }   

        Floyd();

        scanf ("%d", &m);
        printf ("Test Set #%d\n", ++cas);
        while (m--) {

            scanf ("%d%d", &u, &v);
            printf ("%2d to %2d: %d\n", u, v, G[u][v]);
        }
        printf ("\n");

    }
    return 0;
}
时间: 2024-10-07 22:41:25

UVA - 567 Risk(Floyd)的相关文章

uva oj 567 - Risk(Floyd算法)

1 /* 2 一张有20个顶点的图上. 3 依次输入每个点与哪些点直接相连. 4 并且多次询问两点间,最短需要经过几条路才能从一点到达另一点. 5 6 bfs 水过 7 */ 8 #include<iostream> 9 #include<cstring> 10 #include<vector> 11 #include<cstdio> 12 #include<queue> 13 using namespace std; 14 15 struct

uva 567 - Risk

 Risk  Risk is a board game in which several opposing players attempt to conquer the world. The gameboard consists of a world map broken up into hypothetical countries. During a player's turn, armies stationed in one country are only allowed to attac

UVA 567 Risk【floyd】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=508 题意:20个点的任意最短路.floyd 代码: #include <stdio.h> #include <ctime> #include <math.h> #include <string> #include <iter

uva 567 Risk bfs

#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; int ma[25][25]; int d[25]; int vis[25]; int fun(int x,int y){ queue<int> que; que.push(x); vis[x] = 1;

【UVA】821-Page Hopping(Floyd)

模板题,求一个点到任何一点的距离,用Floyd就行了,结点不一定是从1 ~ n 的,所以需要记录结点的id 14063895 821 Page Hopping Accepted C++ 0.119 2014-08-19 10:00:27 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<sta

SDUT 2930-人活着系列之开会(最短路Floyd)

人活着系列之开会 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 人活着如果是为了事业,从打工的到老板的,个个都在拼搏,奋斗了多年终于有了非凡成就,有了一笔丰富的钱财.反过来说,人若赚取了全世界又有什么益处呢?生不带来,死了你还能带去吗?金钱能买保险,但不能买生命,金钱能买药品,但不能买健康,人生在世,还是虚空呀! 在苍茫的大海上,有很多的小岛,每个人都在自己的小岛上.又到了开会的时候了,鹏哥通过飞信告知了每个人,然后大家就开

HDU 2544:最短路( 最短路径入门 &amp;&amp;Dijkstra &amp;&amp; floyd )

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 30972    Accepted Submission(s): 13345 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找

poj 1975 Median Weight Bead(传递闭包 Floyd)

链接:poj 1975 题意:n个珠子,给定它们之间的重量关系,按重量排序,求确定肯定不排在中间的珠子的个数 分析:因为n为奇数,中间为(n+1)/2,对于某个珠子,若有至少有(n+1)/2个珠子比它重或轻,则它肯定不排在中间 可以将能不能确定的权值初始化为0,能确定重量关系的权值设为1 #include<stdio.h> #include<string.h> int a[110][110]; int main() { int T,n,m,i,j,k,d,x,sum; scanf(

UVA 673(括号匹配)

本地单文件上传脚本,命名uf 这是在本机上做的测试,利用bpcs_uploader脚本实现,只是进行简单的封装,自动完善云端文件路径. 技术要点:使用dirname获取文件所在目录,使用pwd获取文件完整路径,并作为云端文件路径. #!/bin/bash cur_dir=$(cd "$(dirname "$1")"; pwd) name=$(basename "$1") /home/grm/bin/bpcs_uploader/bpcs_uploa