레야몬
[C언어] 2606번 바이러스 - 인접 그래프, BFS 본문
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 101
int cnt;
typedef struct GraphType {
int n;
int adj_mat[MAX_VERTICES][MAX_VERTICES];
} GraphType;
void init(GraphType *g)
{
int r, c;
g->n=0;
for(r=0; r<MAX_VERTICES; r++)
for(c=0; c<MAX_VERTICES; c++)
g->adj_mat[r][c]=0;
}
void insert_edge(GraphType *g, int start, int end)
{
g->adj_mat[start][end]=1;
g->adj_mat[end][start]=1;
}
void cnt_vertex(int u, GraphType *g)
{
int i, j;
for(i=1; i<=g->n; i++) {
if(g->adj_mat[u][i]) {
for(j=1; j<=g->n; j++)
g->adj_mat[j][i]=0;
g->adj_mat[u][i]=0, g->adj_mat[i][u]=0;
cnt_vertex(i, g);
}
}
cnt++;
}
int main()
{
int M; //컴퓨터 쌍의 수
int u, v; //연결되는 컴퓨터 번호;
int i, j;
GraphType *g;
g=(GraphType *)malloc(sizeof(GraphType)); //인접 그래프 구현
init(g);
scanf("%d %d", &g->n, &M); g->n;
for(i=0; i<M; i++) {
scanf("%d %d", &u, &v);
insert_edge(g, u, v); //그래프 삽입
}
for(i=1; i<=g->n; i++)
g->adj_mat[i][1]=0;
cnt_vertex(1, g);
printf("%d", cnt-1);
return 0;
}
그래프로 플어야 한다고 한다. 물론 나는 그래프를 몰랐기 때문에 다른 블로그에서 공부를 했다. 참고한 블로그 주소는 아래에 있다. 인접 그래프로 N*N 그래프로 만들어서 노트에 표 그래면서 알고리즘 자니까 빨리 끝났다.
<인접 그래프>
[자료구조론] C로 그래프를 만들자
안녕하세요. 김용성입니다.오늘은 그래프에 대한 개념을 설명하고, C로 간단하게 구현을 해보는 시간을 갖도록 하겠습니다.
velog.io
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C언어] 7576번 토마토 - 그래프 이론, BFS (0) | 2022.08.26 |
---|---|
[C언어] 2630번 색종이 만들기 - 분할 정복, 재귀 (0) | 2022.08.26 |
[C언어] 1927번 최소힙 - 힙 (0) | 2022.08.24 |
1764번 듣보잡 - 해시, 정렬, 이분탐색 (0) | 2022.08.24 |
1697번 숨바꼭질 - BFS (0) | 2022.08.23 |