https://www.acmicpc.net/problem/1057
플루이드-와샬 알고리즘
- 모든 정점의 최단거리를 간단하게 구할수 있다. 시간복잡도는 O(a^3)
2-친구의 수를 구한다고 했으므로 최단거리가 2이하인 값만 카운트 한다
#include <iostream>
using namespace std;
char Graph[51][51];
int graph[51][51];
int ret[51][51];
int INF = 987654321;
int main()
{
int N;
cin >> N;
for (int i = 0; i < N; i++)
cin >> Graph[i];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
if (Graph[i][j] == 'N')
graph[i][j] = INF;
else
graph[i][j] = 1;
}
for(int k = 0; k < N; k++)
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
if (graph[i][j] > graph[i][k] + graph[k][j]) {
graph[i][j] = graph[i][k] + graph[k][j];
}
int cnt = 0;
int maxFriend = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j)
continue;
if (graph[i][j] <= 2 && graph[i][j] != 0)
cnt++;
}
if (cnt > maxFriend)
maxFriend = cnt;
cnt = 0;
}
cout << maxFriend << endl;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 한 줄로 서기 - 복습 (0) | 2021.03.17 |
---|---|
[백준] 트리 - 복습 (0) | 2021.02.05 |
[백준] 명령 프롬프트 - 복습(c++ String) (0) | 2021.02.04 |
[백준] 고층건물 - 복습(hard) (0) | 2021.02.04 |
[백준] 보물 - 복습 (0) | 2021.02.04 |
댓글