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

Posted snzhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进阶实验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<=Nv; i++) {
        G[i][i]=0;
    }
    int v1,v2;
    for(i=0; i<Ne; i++) {
        scanf("%d %d",&v1,&v2);
        G[v1][v2]=1;
        G[v2][v1]=G[v1][v2];
    }
}
void Dijkstra(int s) {
    visit[s]=1;
    int i,j,w,MIN;
    for(j=1; j<=Nv; j++) {
        MIN=INF;
        for(i=1; i<=Nv; i++) {
            if(!visit[i]&&G[s][i]<MIN) {
                MIN=G[s][i];
                w=i;
            }
        }
        visit[w]=1;
        for(i=1; i<=Nv; i++) {
            if(!visit[i]&&MIN+G[w][i]<G[s][i]) {
                G[s][i]=MIN+G[w][i];
            }
        }
    }
}
int main() {
    scanf("%d %d",&Nv,&Ne);
    Init();
    int i,j;
    for(i=1; i<=Nv; i++) {
        memset(visit,0,sizeof(visit));
        Dijkstra(i);
    }
    int sum[MaxVex]={0};
    for(i=1; i<=Nv; i++) {
        for(j=1; j<=Nv; j++)
            sum[i]+=G[i][j];
    }
    int n,x;
    scanf("%d",&n);
    for(i=0; i<n; i++) {
        scanf("%d",&x);
        float tmp=(float)(Nv-1)/(float)sum[x];
        printf("Cc(%d)=%.2f
",x,tmp);
    }
    return 0;
}

 

以上是关于进阶实验6-3.2 社交网络图中结点的“重要性”计算 (30分)-dijkstra算法的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

code1796 社交网络

社交网络

洛谷——P2047 社交网络