BOJ 9205ビールを飲んで歩く
2719 ワード
BOJ 9205は道を探す問題です.
決まった時間内に、ビールを飲みながら歩き、ビールが足りない前に、お店でビールを飲み続け、目的地が見つかるかどうかを印刷します.
に答える
ビールがお腹に入るまで歩ける最大距離は1000 mなので、BFSを利用して1000 m以内のスーパーを訪問し、目的地に着くかどうかを確認する方法を解きました.なぜ正しいのか(なぜ正しいと言ったのに間違っているのか?)テスト例ごとに初期化を忘れています.ミスしないでね 実現 BFSは以前より少し速くなった.しかし、まだミスを犯す傾向がある. TODOダエストラナフロイド・ワッシャーで解きましょう.以前は2つのアルゴリズムがよく用いられていたが,最近はより容易に実現できるBFSまたはDFSを用いて解決された問題が両者の1つであるため,迅速に実現することは困難である. 問に答える前に、複雑さを考慮した練習も必要らしい. 別の解釈 ブログ
決まった時間内に、ビールを飲みながら歩き、ビールが足りない前に、お店でビールを飲み続け、目的地が見つかるかどうかを印刷します.
に答える
ビールがお腹に入るまで歩ける最大距離は1000 mなので、BFSを利用して1000 m以内のスーパーを訪問し、目的地に着くかどうかを確認する方法を解きました.
using namespace std;
bool canWalk(pair<int,int> &a, pair<int,int> &b) {
return abs(a.first - b.first) + abs(a.second - b.second) <= 1000;
}
void bfs(vector<pair<int,int>> &a) {
vector<bool> visited(a.size());
queue <int> q;
q.push(0);
while(!q.empty()) {
int curr = q.front();
q.pop();
visited[curr] = true;
for (int i = 1; i < a.size(); i++) {
if (!visited[i] && canWalk(a[curr], a[i])) {
if (i == a.size() - 1) {
cout << "happy\n";
return;
}
q.push(i);
}
}
}
cout << "sad\n";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<pair<int, int>> a(n + 2);
for (int i = 0; i < n + 2; i++) {
cin >> a[i].first >> a[i].second;
}
bfs(a);
};
return 0;
}
振り返るReference
この問題について(BOJ 9205ビールを飲んで歩く), 我々は、より多くの情報をここで見つけました https://velog.io/@honux/BOJ-9205-맥주-마시며-걸어가기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol