[C++]伯俊-#2066:ウイルス
問題の説明
入力
しゅつりょく
解法
久しぶりのBFS問題です.
他のBFS問題とは異なり,ノード間の接続を確認するだけである.
入力として与えられたboard[]]の対応するインデックスの値を1に変更します.
スタートは1番コンピュータからなので、BFSで使用しているqueueにまず1を入れます.
また、1番コンピュータはウイルス感染状態にあり、vis[1]も1に変換した.
その後、VIS[i]=0をVIS[i]に変換し、VIS[i][i]=1をキューに押し込む(この問題ではウイルスに感染したか否かを意味する).
以上の手順でboardのすべてのセルに対して実行すると、正しい答えが得られます.そして得られた答えから1を取り除く.質問の中で1番パソコン以外の他のパソコンが正解を聞いているからです.
ソースコード
BFSを解くのは久しぶりですが、やっぱり難しいです.
数学の公式を暗記するようにBFSを暗記して実現しますか?やるというより、問題の条件に合わせて実施することが大切です.
また,ほとんどのBFS/DFS問題と同様に,どちらかしか使用できないケースはほとんどない.DFSを調べてみると再帰関数として多く実現されているようです.これまでBFSは比較的便利だった.
入力
しゅつりょく
解法
久しぶりのBFS問題です.
他のBFS問題とは異なり,ノード間の接続を確認するだけである.
入力として与えられたboard[]]の対応するインデックスの値を1に変更します.
スタートは1番コンピュータからなので、BFSで使用しているqueueにまず1を入れます.
また、1番コンピュータはウイルス感染状態にあり、vis[1]も1に変換した.
その後、VIS[i]=0をVIS[i]に変換し、VIS[i][i]=1をキューに押し込む(この問題ではウイルスに感染したか否かを意味する).
以上の手順でboardのすべてのセルに対して実行すると、正しい答えが得られます.そして得られた答えから1を取り除く.質問の中で1番パソコン以外の他のパソコンが正解を聞いているからです.
ソースコード
#include <bits/stdc++.h>
using namespace std;
int board[101][101];
bool vis[101];
int n, m;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int a, b;
int cnt = 0;
queue <int> q;
q.push(1);
vis[1] = 1;
cin >> n;
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> a >> b;
board[a][b] = 1;
board[b][a] = 1;
}
while (!q.empty())
{
int cur = q.front(); q.pop();
cnt++;
for (int i = 1; i <= n; i++)
{
if (board[cur][i] == 1 && vis[i] == 0)
{
vis[i] = 1;
q.push(i);
}
}
}
cout << cnt - 1;
}
フィードバックBFSを解くのは久しぶりですが、やっぱり難しいです.
数学の公式を暗記するようにBFSを暗記して実現しますか?やるというより、問題の条件に合わせて実施することが大切です.
また,ほとんどのBFS/DFS問題と同様に,どちらかしか使用できないケースはほとんどない.DFSを調べてみると再帰関数として多く実現されているようです.これまでBFSは比較的便利だった.
Reference
この問題について([C++]伯俊-#2066:ウイルス), 我々は、より多くの情報をここで見つけました https://velog.io/@josuncom/C-백준-2066-바이러스テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol