[BOJ]1260:DFSとBFS
14959 ワード
💉質問内容
問題に答える
💉にゅうしゅつりょく
🧺入力
1行目は頂点の個数N(1≦N≦1000)、幹線の個数M(1≦M≦10000)、探索を開始する頂点の番号Vを与える.次のM行は、幹線接続の2つの頂点の番号を示します.2つの頂点の間に複数の幹線があります.入力された幹線は双方向です.
🧺しゅつりょく
1行目はDFSを実行した結果を出力し、2行目はBFSを実行した結果を出力する.Vから順にアクセスポイントを出力すればよい.
🔋サンプルI/O
🔮入力例14 5 1
1 2
1 3
1 4
2 4
3 4
🔮サンプル出力11 2 4 3
1 2 3 4
🔮入力例25 5 3
5 4
5 2
1 2
3 4
3 1
🔮サンプル出力23 1 2 5 4
3 1 4 2 5
🔮入力例31000 1 1000
999 1000
🔮サンプル出力31000 999
1000 999
💉もんだいぶんせき
🔋ぶんかつ
BFS, DFS
🔋難易度
シルバーII
💉問題を解く
🔋解法
この問題は、dfsとbfsを順番に実行するだけです.
注意点は、隣接するノードから開始する必要があります.
🔋ソースコード
#include <bits/stdc++.h>
constexpr int MAX = 1001;
int adj[MAX][MAX];
std::vector<int> dfs(int start, int N){
std::vector<int>ans;
std::stack<int>s;
std::vector<bool> visit(N + 1, false);
s.push(start);
visit[start] = true;
ans.push_back(start);
while(!s.empty()){
int x = s.top();
s.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
s.push(x);
s.push(i);
ans.push_back(i);
break;
}
}
}
return ans;
}
std::vector<int> bfs(int start, int N){
std::vector<int>ans;
std::queue<int>q;
std::vector<bool> visit(N + 1, false);
q.push(start);
visit[start] = true;
ans.push_back(start);
while(!q.empty()){
int x = q.front();
q.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
q.push(i);
ans.push_back(i);
}
}
}
return ans;
}
int main() {
int M, N, S;
std::cin >> N >> M >> S;
for(int i=0;i<M;++i){
int a, b;
std::cin >> a >> b;
adj[a][b] = 1;
adj[b][a] = 1;
}
for(auto const& a : dfs(S, N)) std::cout << a << " ";
std::cout << '\n';
for(auto a : bfs(S, N)) std::cout << a << " ";
}
まずは11分ほどかかります
これはdfsとbfsを実行するだけの問題であり,非常に簡単である.
💉終了時..。
気になる部分があればコメントで質問しましょう~
Reference
この問題について([BOJ]1260:DFSとBFS), 我々は、より多くの情報をここで見つけました
https://velog.io/@dpmawile/boj1260
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
🧺入力
1行目は頂点の個数N(1≦N≦1000)、幹線の個数M(1≦M≦10000)、探索を開始する頂点の番号Vを与える.次のM行は、幹線接続の2つの頂点の番号を示します.2つの頂点の間に複数の幹線があります.入力された幹線は双方向です.
🧺しゅつりょく
1行目はDFSを実行した結果を出力し、2行目はBFSを実行した結果を出力する.Vから順にアクセスポイントを出力すればよい.
🔋サンプルI/O
🔮入力例1
4 5 1
1 2
1 3
1 4
2 4
3 4
🔮サンプル出力11 2 4 3
1 2 3 4
🔮入力例25 5 3
5 4
5 2
1 2
3 4
3 1
🔮サンプル出力23 1 2 5 4
3 1 4 2 5
🔮入力例31000 1 1000
999 1000
🔮サンプル出力31000 999
1000 999
💉もんだいぶんせき
🔋ぶんかつ
BFS, DFS
🔋難易度
シルバーII
💉問題を解く
🔋解法
この問題は、dfsとbfsを順番に実行するだけです.
注意点は、隣接するノードから開始する必要があります.
🔋ソースコード
#include <bits/stdc++.h>
constexpr int MAX = 1001;
int adj[MAX][MAX];
std::vector<int> dfs(int start, int N){
std::vector<int>ans;
std::stack<int>s;
std::vector<bool> visit(N + 1, false);
s.push(start);
visit[start] = true;
ans.push_back(start);
while(!s.empty()){
int x = s.top();
s.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
s.push(x);
s.push(i);
ans.push_back(i);
break;
}
}
}
return ans;
}
std::vector<int> bfs(int start, int N){
std::vector<int>ans;
std::queue<int>q;
std::vector<bool> visit(N + 1, false);
q.push(start);
visit[start] = true;
ans.push_back(start);
while(!q.empty()){
int x = q.front();
q.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
q.push(i);
ans.push_back(i);
}
}
}
return ans;
}
int main() {
int M, N, S;
std::cin >> N >> M >> S;
for(int i=0;i<M;++i){
int a, b;
std::cin >> a >> b;
adj[a][b] = 1;
adj[b][a] = 1;
}
for(auto const& a : dfs(S, N)) std::cout << a << " ";
std::cout << '\n';
for(auto a : bfs(S, N)) std::cout << a << " ";
}
まずは11分ほどかかります
これはdfsとbfsを実行するだけの問題であり,非常に簡単である.
💉終了時..。
気になる部分があればコメントで質問しましょう~
Reference
この問題について([BOJ]1260:DFSとBFS), 我々は、より多くの情報をここで見つけました
https://velog.io/@dpmawile/boj1260
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
🔋解法
この問題は、dfsとbfsを順番に実行するだけです.
注意点は、隣接するノードから開始する必要があります.
🔋ソースコード
#include <bits/stdc++.h>
constexpr int MAX = 1001;
int adj[MAX][MAX];
std::vector<int> dfs(int start, int N){
std::vector<int>ans;
std::stack<int>s;
std::vector<bool> visit(N + 1, false);
s.push(start);
visit[start] = true;
ans.push_back(start);
while(!s.empty()){
int x = s.top();
s.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
s.push(x);
s.push(i);
ans.push_back(i);
break;
}
}
}
return ans;
}
std::vector<int> bfs(int start, int N){
std::vector<int>ans;
std::queue<int>q;
std::vector<bool> visit(N + 1, false);
q.push(start);
visit[start] = true;
ans.push_back(start);
while(!q.empty()){
int x = q.front();
q.pop();
for(int i=1;i<=N;++i){
if(!visit[i] && adj[x][i]){
visit[i] = true;
q.push(i);
ans.push_back(i);
}
}
}
return ans;
}
int main() {
int M, N, S;
std::cin >> N >> M >> S;
for(int i=0;i<M;++i){
int a, b;
std::cin >> a >> b;
adj[a][b] = 1;
adj[b][a] = 1;
}
for(auto const& a : dfs(S, N)) std::cout << a << " ";
std::cout << '\n';
for(auto a : bfs(S, N)) std::cout << a << " ";
}
まずは11分ほどかかりますこれはdfsとbfsを実行するだけの問題であり,非常に簡単である.
💉終了時..。
気になる部分があればコメントで質問しましょう~
Reference
この問題について([BOJ]1260:DFSとBFS), 我々は、より多くの情報をここで見つけました
https://velog.io/@dpmawile/boj1260
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([BOJ]1260:DFSとBFS), 我々は、より多くの情報をここで見つけました https://velog.io/@dpmawile/boj1260テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol