码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-03-20 17:20:46      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:+=   col   mic   邻接   网络   float   can   计算   jks   

技术图片

 

 技术图片

 

 解题思路:(邻接矩阵存储)

用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\n",x,tmp);
    }
    return 0;
}

 

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

标签:+=   col   mic   邻接   网络   float   can   计算   jks   

原文地址:https://www.cnblogs.com/snzhong/p/12532539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!