C# Coding Test Course, Kevin Bacon’s Six Degrees of Separation

In this article, we will explore the very interesting concept of “Kevin Bacon’s 6 Degrees of Separation.” This theory suggests that everyone can be connected to Kevin Bacon within six degrees. It is often cited in the film industry and plays an important role in social networking theory. Based on this concept, we will solve an algorithm problem.

Problem Description

We will address an algorithm problem with the following conditions:

Problem Title: Finding Friends of Kevin Bacon

Problem Description: There are N actors, and each actor may be friends with other actors. Given the N actors and their friendship relations, the problem is to calculate the minimum number of degrees of relationship (minimum number of friends) between each actor and Kevin Bacon. These relationships can be thought of as connections, where an edge signifies that they are friends.

If actor A is friends with actor B, then the two actors are in a 1-degree relationship. If actor C is a friend of both A and B, then A and C are in a 2-degree relationship. This process continues, and we need to calculate the minimum friendship paths for all actors to Kevin Bacon.

Input Format

  • The first line contains natural numbers N (1 ≤ N ≤ 100) and M (0 ≤ M ≤ 10,000).
  • From the second line onwards, M lines describe the friendship relations between two actors. For example, “1 2” means that actor 1 and actor 2 are friends with each other.

Output Format

For each actor, output the number of degrees of minimum relationship with Kevin Bacon. If there is no relationship with Kevin Bacon, -1 should be output.

Sample Input

5 4
1 2
1 3
2 4
3 5

Sample Output

2
3
3

Problem Solving Approach

To solve this problem, we can use a graph traversal algorithm. We can construct a graph based on friendship relations and find the shortest path from each actor to Kevin Bacon. To do this, we will follow these steps:

  1. Graph Construction: Construct the graph using an adjacency list representation based on the given friendship relations.
  2. BFS (Breadth-First Search): Perform BFS for all actors to find the shortest path to Kevin Bacon.
  3. Output: Calculate and output the minimum relationship degrees for each actor with Kevin Bacon.

Code Implementation

Now, we will implement the above approach in C#.


using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        int N, M;
        string[] firstLine = Console.ReadLine().Split();
        N = int.Parse(firstLine[0]);
        M = int.Parse(firstLine[1]);

        List[] graph = new List[N + 1];
        for (int i = 1; i <= N; i++)
        {
            graph[i] = new List();
        }

        for (int i = 0; i < M; i++)
        {
            string[] edge = Console.ReadLine().Split();
            int u = int.Parse(edge[0]);
            int v = int.Parse(edge[1]);
            graph[u].Add(v);
            graph[v].Add(u); // Friendship is bidirectional.
        }

        int[] distances = new int[N + 1];

        for (int i = 1; i <= N; i++)
        {
            BFS(graph, distances, i);
        }

        for (int i = 1; i < distances.Length; i++)
        {
            Console.WriteLine(distances[i] == 0 ? -1 : distances[i]);
        }
    }

    static void BFS(List[] graph, int[] distances, int start)
    {
        Queue queue = new Queue();
        bool[] visited = new bool[graph.Length];
        int[] localDistances = new int[graph.Length];
        
        queue.Enqueue(start);
        visited[start] = true;

        while (queue.Count > 0)
        {
            int node = queue.Dequeue();

            foreach (var neighbor in graph[node])
            {
                if (!visited[neighbor])
                {
                    visited[neighbor] = true;
                    queue.Enqueue(neighbor);
                    localDistances[neighbor] = localDistances[node] + 1;
                }
            }
        }

        for (int j = 1; j < distances.Length; j++)
        {
            if (distances[j] == 0 && localDistances[j] > 0)
            {
                distances[j] = localDistances[j];
            }
        }
    }
}

Explanation

This code first takes the number of actors and the number of friendship relations as input and constructs a graph based on these relations. Then, it performs BFS for each actor to calculate the distance to Kevin Bacon. BFS is a very suitable algorithm for exploring all connected nodes and calculating the shortest distance.

It outputs the minimum friendship relationship degrees for each actor. If there is no connection to Kevin Bacon, it outputs -1.

Optimizations and Additional Notes

To obtain accurate results, several optimizations can be considered:

  • When setting the initial distance array, all elements can be initialized to -1 to account for cases with no friendships.
  • During BFS traversal, duplicate nodes can be eliminated to save memory.

Conclusion

In this course, we solved an algorithm problem based on Kevin Bacon’s 6 Degrees of Separation. Through understanding the importance of graph traversal algorithms and the use of BFS, we aim to improve our ability to solve various problems. Overcoming challenges faced while solving problems and exploring various solutions will greatly help improve algorithm skills.

In the future, we will cover a variety of algorithm problems and provide educational content that combines theory with practical coding. We appreciate your interest and support.

© 2023 Algorithm Course. All rights reserved.