[プログラマー]ゲームマップ最短距離
回答日:2021年-08-12
質問する
質問する
質問リンク:https://programmers.co.kr/learn/courses/30/lessons/1844
アクセスと解析
これは典型的なBFS,DFS問題である.
BFSを使用して出発点から到着点まで、壁の有無、アクセスの有無、範囲を確認して移動します.
到着時刻に最低時間の値を返却しました.
コード#コード# #include <vector>
#include <queue>
using namespace std;
struct Point {
int y, x, cnt;
};
#define INF 987654321
int solution(vector<vector<int> > maps)
{
int answer = INF;
int rowSize = maps.size(), colSize = maps.front().size();
int dir[4][2] = {{ 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }};
bool visited[101][101] = { false };
queue<Point> q;
q.push({ 0, 0, 1 });
visited[0][0] = true;
while (!q.empty()) {
Point now = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nextY = now.y + dir[i][0], nextX = now.x + dir[i][1];
if (nextY == rowSize - 1 && nextX == colSize - 1) {
answer = min(answer, now.cnt + 1);
continue;
}
if (nextY < 0 || nextY >= rowSize || nextX < 0 || nextX >= colSize) {
continue;
}
if (visited[nextY][nextX] == true || maps[nextY][nextX] == 0) {
continue;
}
q.push({ nextY, nextX, now.cnt + 1 });
visited[nextY][nextX] = true;
}
}
if (answer == INF) {
return -1;
} else {
return answer;
}
}
結果
フィードバック
BFSの実施に慣れていると思います.
Reference
この問題について([プログラマー]ゲームマップ最短距離), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-게임-맵-최단거리
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
これは典型的なBFS,DFS問題である.
BFSを使用して出発点から到着点まで、壁の有無、アクセスの有無、範囲を確認して移動します.
到着時刻に最低時間の値を返却しました.
コード#コード# #include <vector>
#include <queue>
using namespace std;
struct Point {
int y, x, cnt;
};
#define INF 987654321
int solution(vector<vector<int> > maps)
{
int answer = INF;
int rowSize = maps.size(), colSize = maps.front().size();
int dir[4][2] = {{ 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }};
bool visited[101][101] = { false };
queue<Point> q;
q.push({ 0, 0, 1 });
visited[0][0] = true;
while (!q.empty()) {
Point now = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nextY = now.y + dir[i][0], nextX = now.x + dir[i][1];
if (nextY == rowSize - 1 && nextX == colSize - 1) {
answer = min(answer, now.cnt + 1);
continue;
}
if (nextY < 0 || nextY >= rowSize || nextX < 0 || nextX >= colSize) {
continue;
}
if (visited[nextY][nextX] == true || maps[nextY][nextX] == 0) {
continue;
}
q.push({ nextY, nextX, now.cnt + 1 });
visited[nextY][nextX] = true;
}
}
if (answer == INF) {
return -1;
} else {
return answer;
}
}
結果
フィードバック
BFSの実施に慣れていると思います.
Reference
この問題について([プログラマー]ゲームマップ最短距離), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-게임-맵-최단거리
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <vector>
#include <queue>
using namespace std;
struct Point {
int y, x, cnt;
};
#define INF 987654321
int solution(vector<vector<int> > maps)
{
int answer = INF;
int rowSize = maps.size(), colSize = maps.front().size();
int dir[4][2] = {{ 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }};
bool visited[101][101] = { false };
queue<Point> q;
q.push({ 0, 0, 1 });
visited[0][0] = true;
while (!q.empty()) {
Point now = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nextY = now.y + dir[i][0], nextX = now.x + dir[i][1];
if (nextY == rowSize - 1 && nextX == colSize - 1) {
answer = min(answer, now.cnt + 1);
continue;
}
if (nextY < 0 || nextY >= rowSize || nextX < 0 || nextX >= colSize) {
continue;
}
if (visited[nextY][nextX] == true || maps[nextY][nextX] == 0) {
continue;
}
q.push({ nextY, nextX, now.cnt + 1 });
visited[nextY][nextX] = true;
}
}
if (answer == INF) {
return -1;
} else {
return answer;
}
}
フィードバック
BFSの実施に慣れていると思います.
Reference
この問題について([プログラマー]ゲームマップ最短距離), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-게임-맵-최단거리
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([プログラマー]ゲームマップ最短距離), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/프로그래머스-게임-맵-최단거리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol