アルゴリズム学習-標準1389号:Kevinベーコンの6次法則



もんだいぶんせき

  • ケビンベーコンの法則は、地球上の一人一人が最大6段階で相互認識の人になることができるということだ.
  • ここでのケビンベーコンの数は、すべての人と連絡を取るときに現れる段階の和と言える.
  • 5人がいたとき、ケビン・ベーコンの数は最も小さい人を救った.
  • 入力

  • プレイヤー数N、親友関係数M 24579182
  • M行は友人関係
  • を生む

    アルゴリズムコード

  • BFSも利用できるが,最短経路を探すためにfloydwalsh法を用いた.
  • N, M = map(int,input().split())
    
    INF = int(1e9)
    
    graph = [[0] * (N+1) for _ in range(N + 1)]
    
    for _ in range(M):
        a, b = map(int,input().split())
        graph[a][b] = 1
        graph[b][a] = 1
    
    for i in range(1, N+1):
        for j in range(1, N+1):
            for k in range(1, N+1):
                # 시작점과 끝점이 같으면 안됨 
                if j != k and graph[j][i] and graph[i][k]:
                    if graph[j][k] == 0:
                        graph[j][k] = graph[j][i] + graph[i][k]
                    else:
                        graph[j][k] = min(graph[j][k], graph[j][i] + graph[i][k])
    
    result = [sum([graph[i][j] for j in range(1, N+1)]) for i in range(1, N+1)]
    print(result.index(min(result)) + 1)