๋ฌธ์
์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
int N,M,start_x,start_y,arrived_x,arrived_y,ans;
int map[1001][1001];
int visited[1001][1001][2];
const int dx[4]={0,0,-1,1};
const int dy[4]={-1,1,0,0};
int bfs(int x,int y){
queue<pair<int,pair<int,int>>>q; //{๋ฒฝ ๋ซ๊ธฐ ์ฌ๋ถ,{x,y}}
q.push({1,{x,y}}); //๋ฒฝ์ ๋ซ์ ์ ์์ผ๋ฉด 1
visited[x][y][1]=1;
while(!q.empty()){
int wand=q.front().first;
int x=q.front().second.first;
int y=q.front().second.second;
if(x==arrived_x-1&&y==arrived_y-1){ //๋์ฐฉํ์ ๋ ์ข
๋ฃ
return visited[x][y][wand];
}
q.pop();
for(int i=0; i<4; i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=0&&nx<N&&ny>=0&&ny<M){ //๋ฒฝ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์์์ ๋
if(map[nx][ny]==1&&wand){ //๋ฒฝ์ด ์๊ณ , ์งํก์ด๋ฅผ ์ฌ์ฉ ํ ์ ์์ ๋
visited[nx][ny][wand-1] = visited[x][y][wand]+1; //๋ฒฝ์ ๋ซ๊ณ ์ด์ ์ต๋จ๊ฑฐ๋ฆฌ์ +1 ํด์ค๋ค.
q.push({wand-1,{nx,ny}});
}
else if(map[nx][ny]==0&&!visited[nx][ny][wand]){ //๋ฒฝ์ด ์๊ณ , ๋ฐฉ๋ฌธํ์ง ์์๋ ๊ณณ์ผ๊ฒฝ์ฐ
visited[nx][ny][wand]=visited[x][y][wand]+1;
q.push({wand,{nx,ny}});
}
}
}
}
return -1;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M>>start_x>>start_y>>arrived_x>>arrived_y;
for(int i=0; i<N; i++){
for(int k=0; k<M; k++){
cin>>map[i][k];
}
}
ans=bfs(start_x-1,start_y-1);
if(ans==-1) cout<<-1;
else cout<<ans-1;
}
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 14950๋ฒ - ์ ๋ณต์ (0) | 2021.11.14 |
---|---|
[๋ฐฑ์ค,c++] 14938๋ฒ - ์๊ฐ๊ทธ๋ผ์ด๋ (0) | 2021.11.14 |
[๋ฐฑ์ค,c++] 1439๋ฒ - ๋ค์ง๊ธฐ (0) | 2021.11.14 |
[๋ฐฑ์ค,c++] 14921๋ฒ - ์ฉ์ก ํฉ์ฑํ๊ธฐ (0) | 2021.11.14 |
[๋ฐฑ์ค,c++] 14920๋ฒ - 3n+1 ์์ด (0) | 2021.11.14 |
[๋ฐฑ์ค,c++] 14916๋ฒ - ๊ฑฐ์ค๋ฆ๋ (0) | 2021.11.14 |
๋๊ธ