Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 1406
- 백준
- 해시구현
- 백준 17822
- Stack 이란
- 별 찍기 10
- C/C++ 구현
- 백준 5397
- heap
- 백준 1158
- qorwns
- 백준 2447
- ㅣ풀이
- 게리멘더링2
- 해시 구현
- AVL 시간 복잡도
- 구현
- 풀이
- dfs
- 자료구조
- 1764
- 조세퍼스 순열
- 백준 17779
- 원판 돌리기
- 5397
- c#
- 시간 복잡도
- 스택의 특징
- 백준 17471
- 버킷 정렬
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 1261] 알고스팟 본문
https://www.acmicpc.net/problem/1261
1261번: 알고스팟
첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미한다. (1, 1)과 (N, M)은 항상 뚫려있다.
www.acmicpc.net
요구사항
벽을 제일 최소한으로 만나서 제일 오른쪽 밑에 도착하기
풀이
다익스트라 알고리즘으로 bfs처럼 풀이한다.
dist[i][j]를 INF으로 저장하고
갱신할 수 있으면 갱신하는 형식으로 푼다
갱신할 수 없다면 최소로 도달하는게 아니다
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int INF=0x7fffffff;
int dr[4] = {-1,0,1,0};
int dc[4] = {0,-1,0,1};
int map[101][101];
int dist[101][101];
int n,m;
int main()
{
cin>>n>>m;
for(int i=0 ; i < m ; i++){
for(int j=0 ; j < n ; j++){
char ch;
scanf(" %c",&ch);
if(ch=='1'){
map[i][j]=1;
}
else{
map[i][j]=0;
}
dist[i][j]=INF;
}
}
priority_queue<pair<pair<int,int> ,int>> q;
dist[0][0]=0;
q.push({{0,0},0 });
while(!q.empty()){
int r = q.top().first.first;
int c = q.top().first.second;
int dis = -q.top().second;
q.pop();
if(dis>dist[r][c])
continue;
for(int i=0 ; i <4 ; i++){
int nr = r+dr[i];
int nc = c+dc[i];
if(nr<0 || nc<0 || nr>=m || nc>=n){
continue;
}
int ndist=dis+map[nr][nc];
if( dist[nr][nc] > ndist){
dist[nr][nc]= ndist;
q.push({{nr,nc},-ndist});
}
}
}
cout<<dist[m-1][n-1];
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1504] 특정한 최단 경로 (0) | 2020.01.14 |
---|---|
[백준 4485] 젤다 (0) | 2020.01.14 |
[백준 1238] 파티 (0) | 2020.01.14 |
[백준 1987] 알파벳 (0) | 2020.01.13 |
[백준 2468] 안전 영역 (0) | 2020.01.13 |
Comments