본문 바로가기
알고리즘/그리디 알고리즘

1507 궁금한 민호

by tryotto 2019. 6. 27.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
#include <stdio.h>
 
int arr[30][30= { 0 };
int check[30][30= { 0 };
 
int main() {
    int n;
    scanf("%d"&n);
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d"&arr[i][j]);
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i != j)
                 check[i][j] = 1;
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (arr[j][k] > arr[j][i] + arr[i][k]) {
                    printf("-1");
                    return 0;
                }
                else if ((arr[j][k] == arr[j][i] + arr[i][k]) && i != j && i != k) {
                    check[j][k] = 0;
                }
            }
        }
    }
       
    int rst = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            if (check[i][j] == 1)
                rst += arr[i][j];
        }
    }
 
    printf("%d", rst);
}
cs


'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글

12018 yonsei toto  (0) 2019.06.28
1439 뒤집기  (0) 2019.06.28
1343 폴리노미오  (0) 2019.06.27
1783 병든 나이트  (0) 2019.06.27
1138 한 줄로 서기  (0) 2019.06.27