백준(BAEKJOOB) 2606번 바이러스 // c++언어
2023. 2. 3. 14:32ㆍ언어/c, c++
728x90
문제
나는 이문제를 커피 우선 방식인 BFS로 풀기로 했다.
Int n, m;
//n은 노드의 개수
//m간선의 개수
int vis[10000];
vector<int>map[101]; //인접한다는 것을 알려 주기위해서 vector로 선언
map을 vector로 선언한 이유는 밑에 인접한 숫자들을 표현해 줄 때 일반
int 형을 써버리면 쓸 수 없게 되어서 vector를 이용하였습니다.
기본 bfs 구조를 쓰고
거기서 pop을 한 후 count 숫자가 하나씩 카운터 하게
만들었습니다.
(연결되어있는 컴퓨터만 숫자를 카운터 해야 되기 때문에)
while (!queue.empty()) {
int x = queue.front();
queue.pop();
coun++;
//숫자가 있을경우
// 큐에 맨앞에 있는 숫자를 x라 하고
// pop 해준후 count 해준다.
for (int i = 0; i < map[x].size(); i++) {
int y = map[x][i];
if (!vis[y]) {
queue.push(y);
vis[y] = true;
} //인접한 친구들 방문처리
}
}
}
map [a]. push_back(b);
map [b]. push_back(a);
두 그래프를 서로 연결시킵니다
bfs에 1을 준 이유는 start에 1부터 시작하기 위해서입니다
문제를 잘 읽어보면 1번 컴퓨터가 웜 바이러스에 걸렸을 때, 를
이야기하고 있기 때문에
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
map[a].push_back(b);
map[b].push_back(a);
}
bfs(1);
cout << coun << endl;
}
총 코드
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int n, m;
//n은 노드의 개수
//m간선의 갯수
int vis[10000];
vector<int>map[101]; //인접한다는 것을 알려 주기위해서 vector로 선언
int coun = -1;
//-1인 이유는 : 자기자신 1을 포함하니 1부터시작해서 -1을 count로 해줬다
void bfs(int start) {
queue<int>queue;
queue.push(start); // start를 큐에 가장 앞쪽에 넣어준다.
vis[start] = true; // start 방문처리
while (!queue.empty()) {
int x = queue.front();
queue.pop();
coun++;
//숫자가 있을경우
// 큐에 맨앞에 있는 숫자를 x라 하고
// pop 해준후 count 해준다.
for (int i = 0; i < map[x].size(); i++) {
int y = map[x][i];
if (!vis[y]) {
queue.push(y);
vis[y] = true;
} //인접한 친구들 방문처리
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
map[a].push_back(b);
map[b].push_back(a);
}
bfs(1);
cout << coun << endl;
}
728x90
'언어 > c, c++' 카테고리의 다른 글
(백준BAEKJOOB )- 1158번 요세푸스 문제 c++ (0) | 2023.02.10 |
---|---|
백준(BAEKJOOB) 2164번 카드 // c++언어 (0) | 2023.02.03 |
백준(BAEKJOOB) 1260번 DFS와 BFS // c++언어 (0) | 2023.02.02 |
백준(BAEKJOOB) 1427번 소트인사이드 c++언어 (0) | 2023.01.24 |
백준(BAEKJOOB) 10773번 제로 문제 c++언어 (0) | 2023.01.21 |