문제

문제 링크

어떻게 접근할 것인가?

  • 플로이드 와샬 알고리즘이라는데 그냥 수업시간 기억으로 플었다 키야ㅎㅎ
  • 모든 노드에서 모든 노드로의 거리를 구하는 문제이다!

코드

#include <cstdio>

int n, m, n1, n2, **d, min = 1;
int main(){
    scanf("%d %d", &n, &m);
    d = new int*[n+1];
    for(int i = 0; i < n+1; i++){
        d[i] = new int[n+1];
        for(int j = 1; j < n+1; j++)d[i][j] = 5000;
    }
    for(int i = 0; i < m; i++){
        scanf("%d %d", &n1, &n2);
        d[n1][n2] = d[n2][n1] = 1;
    }
    for(int k = 1; k <= n; k++){
        for(int i = 1; i <= n ; i++){
            for(int j = 1; j <= n; j++){
                if(d[i][j] > d[i][k] + d[k][j])d[i][j] = d[i][k] + d[k][j];
            }
        }
    }
    for(int i = 1; i < n+1; i++){
        for(int j = 1; j < n+1; j++)d[i][0] += d[i][j];
        if(d[i][0] < d[min][0])min = i;
    }
    printf("%d", min);
}

느낀점

  • 알고리즘 수업 나름 열심히 들었는가보당..ㅎㅎㅎ 기분조타ㅎㅎ