UVA821 floyd最短路+暴力

题意:给n条边,求每两个点之间的平均距离;

思路:数据是100条边,用floyd得到每两点之间的最短距离,然后遍历相加除以边的数目;

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #define N 110
 7 #define INF 0x7ffffff
 8 #define repu(i,a,b) for(int i=a;i<b;i++)
 9 using namespace std;
10 int p[N][N],vis[N][N];
11 int floyd(int n,int m)
12 {
13     repu(k,n,m)
14     {
15         repu(i,n,m)
16         repu(j,n,m)
17         if(p[i][k] < INF && p[k][j] < INF)
18         {
19             p[i][j] = min(p[i][j],p[i][k] + p[k][j]);
20         }
21     }
22 }
23 int main()
24 {
25     int u,v,kase=1;
26     while(1)
27     {
28         repu(i,0,N)
29         {
30             repu(j,0,N)
31             p[i][j] = INF,vis[i][j] = 0;
32             p[i][i] = 0;
33         }
34         memset(vis,0,sizeof(vis));
35         scanf("%d%d",&u,&v);
36         if(!u&&!v)
37             break;
38         p[u][v] = 1;
39         vis[u][v] = 1;
40         int minn = INF,maxn = 0;
41         while(1)
42         {
43             scanf("%d%d",&u,&v);
44             if(!u&&!v)
45                 break;
46             p[u][v] = 1;
47             if(!vis[u][v])
48                 vis[u][v] = 1;
49             maxn = max(max(v,u),maxn);
50             minn = min(min(v,u),minn);
51         }
52         int sum = 0,t = 0;
53         floyd(minn,maxn+1);
54         repu(i,minn,maxn+1)
55         {
56             repu(j,minn,maxn+1)
57             if(p[i][j]!=INF && i!=j )
58                 t++,sum += p[i][j];
59         }
60         double q = (double)sum / (double)t;
61        // cout<<t<<endl<<sum<<endl;
62         printf("Case %d: average length between pages = %.3lf clicks\n",kase++,q);
63     }
64     return 0;
65 }

时间: 2024-10-15 13:47:04

UVA821 floyd最短路+暴力的相关文章

【啊哈!算法】算法6:只有五行的Floyd最短路算法

暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表示这条公路的长短.请注意这些公路是单向的.我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径.这个问题这也被称为“多源最短路径”问题. 现在需要一个数据结构来存储图的信息,我们仍然可以用一个4*4的矩阵(二维数组e)来存储.比如1号城市到2号城市的路程为2,则设e[1][2]

HDU 1385 Minimum Transport Cost(Floyd 最短路 打印路径)

HDU 1385 大意: 有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度. 如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费). 现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和. 求最小花费,如果有多条路经符合,则输出字典序最小的路径. 思路: Floyd求最短路,打印路径即可. 1 /*--------------------------------------------------------

poj2607Fire Station(floyd最短路)

题目链接: 啊哈哈,点我带我 这道题目当时一看觉得很熟悉,但是后来越想越混乱,搞得最后题目都没搞清楚...比赛的时候不知道怎么想的,但是大致思想是对的.... 题意: 这道题目是讲原来镇上有若干个加油站,但是镇上的居民觉得消防站的距离李自己家太远,所以决定在居民点键一个消防站,要使离居民点的最大距离最小.. 思路:毫无疑问是最短路...但是这题数据太多..所以预处理的时候用floyd求出两个 任意两点间的距离,然后用加油站去更新到到各个居民点的最短距离..那么枚举所有加油站后就会得到所有到居民点

HDU 2833 WuKong(floyd最短路)

题目地址:HDU 2833 这题想到了最后是通过dis[s][t]==dis[s][i]+dis[i][j]+dis[j][t]的思路来判定是否属于最短路的一条..但是没想到可以用floyd来找最短路中的点数...最短路还是太渣了..好多性质都不会利用.. 这题的思路就是通过floyd对每两个点之间的最短路条数进行计数,然后通过上面的公式(对两条路线均要判定,都符合才说明都可以走),再找最短路中的最大点数. 代码如下: #include <iostream> #include <stdi

POJ2112Optimal Milking(二分+floyd最短路+网络流)

题目地址:http://poj.org/problem?id=2112 最近忙着预习课本备考,没怎么刷题,(我是真的有在好好看书..)不敲题还是手痒痒,马上就邀请赛了,还是每晚睡觉前都拿来刷题吧.白天的时间足够了. 话说这题调了一晚上...一直以为是几天没敲状态下滑..(虽然也没几天..)当发现错误的时候才发现原来是少敲了个字母...而且我一般很少在bfs的那个地方出错,错误地方也很隐蔽..所以找了一晚上,真是敲错一个字母成千古恨. 这题大概是职业生涯目前为止敲得最长的一道算法题了..(模拟题除

只有五行的Floyd最短路算法

暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表示这条公路的长短.请注意这些公路是单向的.我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径.这个问题这也被称为"多源最短路径"问题. 现在需要一个数据结构来存储图的信息,我们仍然可以用一个4*4的矩阵(二维数组e)来存储.比如1号城市到2号城市的路程为2,则设e[

Wikioi 1020 孪生蜘蛛 Label:Floyd最短路

题目描述 Description 在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道. 根据防护中心的消息,敌方已经有一只特种飞蛾避过第二层防卫,直逼内城南端通道入口.但优秀的蜘蛛已经在每个通道内埋下了坚固的大网,无论飞蛾进入哪个通道,他只有死路一条!(因为他是无法挣脱超级蛛网的) 现在,001和002分别驻扎在某两个通道内.各通道通过内线相通,通过每条内线需要一定的时间.当特种飞蛾被困某处,001或002会迅速赶来把它结果掉

HDU 4034 Graph Floyd最短路

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 给你一个最短路的表,让你还原整个图,并使得边最少 题解: 这样想..这个表示通过floyd得到的,那么如果从u到v没有小于等于边(u,v)的路径,那么边(u,v)就是必须的,否则从u到v需要走更远的路.如果有路径和边(u,v)是一样的,那么边(u,v)就是不需要的,这是因为,任何需要从u到v的路径都可以用另外一条代替.如果有小于边(u,v)的,那么这就是个非法的最短路表. 代码: #i

HDU 5137 How Many Maos Does the Guanxi Worth (14广州 Floyd 最短路)

How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 468    Accepted Submission(s): 164 Problem Description "Guanxi" is a very important word in Chinese. I