백준 1261 - 알고스팟
문제
백준 1261 - 알고스팟 풀러가기
문제 분석
이 문제의 경우에는 벽을 뚫는 경우에는 1 벽을 뚫지 않아도 되는 경우에는 0 의 가중치로 이루어진 그래프라고 생각 할 수 있다.
bfs는 모든 가중치가 1인 경우에 적용할 수 있다고 생각하여 bfs로 풀 수 없다고 생각 할 수 있는데, 그렇지 않다.
큐를 2개 이용하거나, 덱을 이용하면 bfs로 풀 수 있다.
문제 풀이(C++)
-
덱을 이용한 전체 코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include <cstdio>#include <deque>using namespace std;int main() {int maze[101][101];int visit[101][101];int dx[] = { 0, 0,1,-1 };int dy[] = { 1, -1,0,0 };deque<pair<int, int>> d;int m, n;scanf("%d %d", &m, &n);for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {scanf("%1d", &maze[i][j]);visit[i][j] = -1;}}d.push_back(make_pair(1, 1));visit[1][1] = 0;while (!d.empty()) {int cy = d.front().first;int cx = d.front().second;d.pop_front();for (int i = 0;i < 4; i++) {int ny = cy + dy[i];int nx = cx + dx[i];if (nx >= 1 && nx <= m && ny >= 1 && ny <= n) {if (visit[ny][nx] == -1) {if (maze[ny][nx]==0) {d.push_front(make_pair(ny, nx));visit[ny][nx] = visit[cy][cx];}else {d.push_back(make_pair(ny, nx));visit[ny][nx] = visit[cy][cx] + 1;}}}}}printf("%d", visit[n][m]);return 0;}cs
연관 문제
-
아직 배움의 과정에 있는 학생이니 내용에 부족한 점이 보이면 지적은 하되, 비난은 하지 말아주세요!!
</html>
댓글남기기