Algorithm/백준
[C][백준] 5567. 결혼식 구현하기 | 깊이 제한 그래프 탐색
이무기뱀술
2023. 3. 6. 10:00
728x90
이 문제의 핵심은 자신의 친구, 친구의 친구만 초대하는 것이다.
즉, 나(1번 노드)를 기준으로, 2단계 이내로 연결된 친구만 초대하는 것이다.
그렇다면 이 문제는 그래프 탐색 알고리즘에서 깊이를 제한하는 코드를 만들면 되는 것이다.
문득, 궁금증이 들었다. ChatGPT에 물어볼까?
그래서 ChatGPT에 이렇게 물어보았다.
자세한 답변 분석은 다음 포스트에 하겠다
아무튼 이 코드를 그대로 복붙할 수는 없으니 나의 코드와 결합하여 문제에 맞게 수정하였다.
ChatGPT에서 얻은 것은 level 배열을 쓰는 모티브랄까?
#include <stdio.h>
#define MAX_SIZE 10005
int vertex, edge;
int table[505][505] = {0};
int visit[MAX_SIZE] = {0};
int queue[MAX_SIZE];
int level[MAX_SIZE] = {0}; // ChatGPT의 도움!
int front = 0, rear = 0;
void addEdge(int n1, int n2);
void bfs(int v, int depthLimit); // 깊이 제한
int main()
{
scanf("%d %d", &vertex, &edge); // 동기의 수, 리스트의 길이
for (int i = 0; i < edge; i++)
{
int f1, f2;
scanf("%d %d", &f1, &f2);
addEdge(f1, f2);
}
bfs(1, 2); // 1부터 bfs, 깊이 제한 2
int cnt = 0;
for (int i = 2; i <= vertex; i++) // 자기자신(1) 제외
{
if (0 < level[i])
cnt++;
}
printf("%d", cnt);
return 0;
}
void addEdge(int n1, int n2)
{
table[n1][n2] = table[n2][n1] = 1;
}
void bfs(int v, int depthLimit)
{
int current; // 현재 방문 노드
queue[rear++] = v;
visit[v] = 1;
level[v] = 0;
while (front < rear)
{
current = queue[front++];
if (level[current] == depthLimit) // 깊이 제한: 2
{
continue;
}
for (int i = 1; i <= vertex; i++)
{
if (visit[i] || !table[current][i])
{
continue;
}
queue[rear++] = i;
visit[i] = 1;
level[i] = level[current] + 1;
}
}
}
728x90