PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分)

7-36 社交网络图中结点的“重要性”计算 (30 分)

在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。

“紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值。在有N个结点的网络中,结点v?i??的“紧密度中心性”(数学上定义为v?i??到其余所有结点v?j?? (j≠i) 的最短距离(的平均值的倒数:

对于非连通图,所有结点的紧密度中心性都是0。

给定一个无权的无向图以及其中的一组结点,计算这组结点中每个结点的紧密度中心性。

输入格式:

输入第一行给出两个正整数N和M,其中N(≤)是图中结点个数,顺便假设结点从1到N编号;M(≤)是边的条数。随后的M行中,每行给出一条边的信息,即该边连接的两个结点编号,中间用空格分隔。最后一行给出需要计算紧密度中心性的这组结点的个数K(≤)以及K个结点编号,用空格分隔。

输出格式:

按照Cc(i)=x.xx的格式输出K个给定结点的紧密度中心性,每个输出占一行,结果保留到小数点后2位。

输入样例:

9 14
1 2
1 3
1 4
2 3
3 4
4 5
4 6
5 6
5 7
5 8
6 7
6 8
7 8
7 9
3 3 4 9

输出样例:

Cc(3)=0.47
Cc(4)=0.62
Cc(9)=0.35题目分析:这是一道图的 多源最短路问题,利用Floyd算法来解决

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<stdio.h>
  3 #include<string.h>
  4 #include<malloc.h>
  5 #define INIFITY 65535
  6 typedef struct ENode* Edge;
  7 struct ENode
  8 {
  9     int V1, V2;
 10 };
 11 typedef struct GNode* Graph;
 12 struct  GNode
 13 {
 14     int G[10000][10000];
 15     float Nv;
 16     int Ne;
 17 };
 18
 19 int IsEdge(Graph Gra, int V1, int V2)
 20 {
 21     return Gra->G[V1][V2]!=INIFITY;
 22 }
 23
 24 void Insert(Graph Gra, Edge E)
 25 {
 26     Gra->G[E->V1][E->V2] = 1;
 27     Gra->G[E->V2][E->V1] = 1;
 28 }
 29
 30 Graph CreateGraph(int Nv)
 31 {
 32     Graph Gra = (Graph)malloc(sizeof(struct GNode));
 33     Gra->Nv = Nv;
 34     Gra->Ne = 0;
 35     for (int i = 1; i <=Gra->Nv; i++)
 36         for (int j = 1; j <= Gra->Nv; j++)
 37         {
 38             Gra->G[i][j] = INIFITY;
 39             if (i == j)
 40                 Gra->G[i][j] = 0;
 41         }
 42     return Gra;
 43 }
 44
 45 int Dist[10000][10000];
 46 int Flag=1;
 47 void Floyd(Graph Gra)
 48 {
 49     int i, j, k;
 50     for (i = 1; i <= Gra->Nv; i++)
 51         for (j = 1; j <= Gra->Nv; j++)
 52             Dist[i][j] = Gra->G[i][j];
 53     for(int k=1;k<=Gra->Nv;k++)
 54         for(int i=1;i<=Gra->Nv;i++)
 55             for (int j = 1; j <= Gra->Nv; j++)
 56             {
 57                 if (Dist[i][k] + Dist[k][j] < Dist[i][j])
 58                     Dist[i][j] = Dist[i][k] + Dist[k][j];
 59             }
 60     for (i = 1; i <= Gra->Nv; i++)
 61         for (j = 1; j <= Gra->Nv; j++)
 62             if (Dist[i][j] == INIFITY)
 63             {
 64                 Flag = 0;
 65                 break;
 66             }
 67 }
 68
 69 int main()
 70 {
 71     int N, M;
 72     scanf("%d%d", &N, &M);
 73     Graph Gra = CreateGraph(N);
 74     Gra->Ne = M;
 75     Edge E = (Edge)malloc(sizeof(struct ENode));
 76     for (int i = 0; i < Gra->Ne; i++)
 77     {
 78         scanf("%d%d", &(E->V1), &(E->V2));
 79         Insert(Gra, E);
 80     }
 81     Floyd(Gra);
 82     float num=0;
 83     int K;
 84     scanf("%d", &K);
 85     while (K--)
 86     {
 87         num = 0;
 88         int n;
 89         scanf("%d", &n);
 90         if (Flag)
 91         {
 92             for (int i = 1; i <= Gra->Nv; i++)
 93                 num += Dist[n][i];
 94             printf("Cc(%d)=%.2f\n", n, (Gra->Nv - 1) / num);
 95         }
 96         else
 97             printf("Cc(%d)=0.00\n", n);
 98     }
 99     return 0;
100 }

原文地址:https://www.cnblogs.com/57one/p/11666384.html

时间: 2024-10-08 00:56:55

PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)的相关文章

进阶实验6-3.2 社交网络图中结点的“重要性”计算 (30分)-dijkstra算法

解题思路:(邻接矩阵存储) 用dijkstra算法依次求出每个结点到其余结点的最短距离 #include <stdio.h> #include <string.h> #define INF 0x3f3f3f3f #define MaxVex 1000+10 int G[MaxVex][MaxVex]; int visit[MaxVex]; int Nv,Ne; void Init() { memset(G,INF,sizeof(G)); int i; for(i=1; i<=

PTA数据结构与算法题目集(中文) 7-32

PTA数据结构与算法题目集(中文)  7-32 7-32 哥尼斯堡的“七桥问题” (25 分) 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学. 这个问题如今可以描述为判断欧拉回路是否存在的问题.欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 输

PTA数据结构与算法题目集(中文) 7-14

PTA数据结构与算法题目集(中文)  7-14 7-14 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔. 输出格式: 在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔.如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数. 输入样例: 4 130057

PTA数据结构与算法题目集(中文) 7-16

PTA数据结构与算法题目集(中文)  7-16 7-16 一元多项式求导 (20 分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格. 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0题目分析:要注意判断输入停止的标志 利用~scanf来判断 其它问题到没发现 (

PTA数据结构与算法题目集(中文) 7-27

PTA数据结构与算法题目集(中文)  7-27 7-27 家谱处理 (30 分) 人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究.实验中,使用计算机处理家谱.为了实现这个目的,研究人员将家谱转换为文本文件.下面为家谱文本文件的实例: John Robert Frank Andrew Nancy David 家谱文本文件中,每一行包含一个人的名字.第一行中的名字是这个家族最早的祖先.家谱仅包含最早祖先的后代,而他们的丈夫或妻子不出现在家谱中.每个人的子女比父母多缩进2个空格.

PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队. 输入格式: 输入第一行给出4个正整数N.M.S.D,其中N(2)是城市的个数,顺便假设城市的编号为0 ~ (:M是快速道路的条数

PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数(将关键字Key中的最后3个字符映射为整数,每个字符占5位:再用除留余数法将整数映射到长度为P的散列表中.例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25:再通过移位将其映射为3:然后根据表长得到,即是该字符串的散列映射位置. 发生冲突时请

PTA 7-36 社交网络图中结点的“重要性”计算(图的BFS)

本题考点: 图的BFS 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱.而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同. "紧密度中心性"是用来衡量一个结点到达其它结点的"快慢"的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值.在有N个结点的网络

PTA 数据结构与算法题目集 6-1

单链表的反转 回顾题目戳这里 https://pintia.cn/problem-sets/15/problems/724 带头节点的反转代码 List Reverse( List L ){ List head = (List)malloc(sizeof(PtrToNode)); head->Next = NULL; List cur = L,nNode; while(cur){ nNode = cur->Next; cur->Next = head->Next; head->