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

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

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

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

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

    对于非连通图,所有结点的紧密度中心性都是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, (Gra->Nv - 1) / num);
     95         }
     96         else
     97             printf("Cc(%d)=0.00
    ", n);
     98     }
     99     return 0;
    100 }
    View Code
  • 相关阅读:
    Windows 系统里面的 hosts 文件
    JDK 安装目录中 native2ascii.exe 命令详解
    火狐浏览器安装 Modify Headers 插件
    java iterator
    HashSet HashTable HashMap的区别
    c# 序列化
    Oracle 同步
    QL Server 高可用性(一)AlwaysOn 技术
    sqlserver 日志传送
    oracle forall
  • 原文地址:https://www.cnblogs.com/57one/p/11666384.html
Copyright © 2011-2022 走看看