ソーシャルネットワーク内の、または個々のユニット(ノード)間のある関係(エッジ)によって関連しています。彼らは、これらの関係に影響を与え、この効果は、相互接続のインタラクティブなネットワークは、減少させることができるノード間の広がりを向上させることができることが理解されるであろう。それらの位置ノードによれば、ネットワーク内の重要性を反映してレベルが同じではありません。
「近似性中心性」は、ノードの尺度はより迅速な指標の「速さ」の他のノード、下部中央ノードの中心よりも高いノードに到達する(平均センス下の)ネットワーク内の他のノードに到達し、したがって伝播ネットワークにおけるより重要な値。ネットワーク内のN個のノード、ノードVが存在するI「近中心性」CCのは、(V I)数学的にVとして定義されている私はすべてのノードvを休ませるJ(J≠I)最短距離D(V I、V Jの平均値の逆数)の:
非連通図気密中央ノードについては、全て0です。
無力無向グラフノードと各ノードにおける近中央ノードの集合を計算する前記グループ所与。
入力フォーマット:
最初の行の入力をN(≦10 2つの正の整数N及びM与える。4。M(≦10;)図内のノードの数であるが、方法は1からNまでのノード番号と仮定する。5)側でありますいくつか。その後のM行は、各行片側は、情報が与えられ、すなわち、スペースで区切られたエッジによって接続された2つのノードの数。最後の行は、スペースで区切られたノード番号、ノードK番目の数(≦100)、及びKのセットの中心を計算するために気密性の必要性を与えます。
出力フォーマット:
タイトK所与のノードの次数中心の出力(I)= X.XXフォーマット、ライン毎の各出力、2進保持結果に応じて、CC。
サンプル入力:
9 14
1 2
1 3
1 4
2 3
3 4
4
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分
import java.util.Scanner;
import java.util.concurrent.LinkedBlockingDeque;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int vertex = sc.nextInt();
int edge = sc.nextInt();
Graph graph = new Graph(vertex, edge);
for (int i = 0; i < edge; i++) {
int temp1 = sc.nextInt();
int temp2 = sc.nextInt();
graph.Insert(temp1 - 1, temp2 - 1);
}
int num = sc.nextInt();
for (int i = 0; i < num; i++) {
int n = sc.nextInt();
System.out.format("Cc(%d)=%.2f\n",n,graph.Importance(n-1));
}
}
}
class Graph {
private int Vertex;
private int Edge;
private int[][] G;
Graph(int v, int e) {
Vertex = v;
Edge = e;
G = new int[v][v];
}
void Insert(int v1, int v2) {
G[v1][v2] = 1;
G[v2][v1] = 1;
}
double Importance(int v) {
int[] distance = new int[Vertex];
for (int i = 0; i < Vertex; i++) {
distance[i] = Integer.MAX_VALUE;
}
distance[v] = 0;
int[][] Visited = new int[Vertex][Vertex];
LinkedBlockingDeque<Integer> q = new LinkedBlockingDeque<Integer>();
q.push(v);
while(!q.isEmpty()){
int temp = q.poll();
for(int i=0;i<Vertex;i++){
if(G[temp][i]==1&&Visited[temp][i]==0){
if(distance[i]>distance[temp]+1)
distance[i] = distance[temp]+1;
q.add(i);
Visited[temp][i] = 1;
Visited[i][temp] = 1;
}
}
}
double sum = 0;
for (int i = 0; i < Vertex; i++) {
if (distance[i] != Integer.MAX_VALUE) {
sum += distance[i];
}
}
return (Vertex - 1.0) / sum;
}
}