작성
·
174
0
#include <bits/stdc++.h>
using namespace std;
#define y1 aaaa
int n, m, x1, y1, x2, y2, visited[304][304], cnt;
char a[304][304];
string s;
const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};
void bfs(int sy, int sx, int ey, int ex){
visited[sy][sx] = 1;
queue<int> q;
q.push(1000*sy + sx);
while(a[ey][ex] != '0'){
cnt++;
queue<int> temp;
while(q.size()){
int y = q.front()/1000;
int x = q.front()%1000;
q.pop();
for(int i=0; i<4; i++){
int ny = y+dy[i];
int nx = x+dx[i];
if(ny<0 || ny>=n || nx<0 || nx>=m || visited[ny][nx]) continue;
visited[ny][nx] = cnt;
if(a[ny][nx] == '0'){
//0을 만나면 q에 0이 없을때까지 계속 돈다.
q.push(1000*ny + nx);
} else{
//1이나 목적지#을 만나면 0으로 바꾸고 그 위치를 temp에 기억해둔다.
a[ny][nx] = '0';
temp.push(1000*ny + nx);
}
}
}
//q에 0이 없어지면 temp에 저장해두었던 1의 위치들을 q에 다시 넣어서
//0에서 했던 과정들을 다시 반복해준다.
q = temp;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n >> m;
cin >> x1 >> y1 >> x2 >> y2;
x1--, y1--, x2--, y2--;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> a[i][j];
}
}
bfs(y1, x1, y2, x2);
cout << visited[y2][x2] << '\n';
return 0;
}
답변 1
0
안녕하세요 firdoo님 ㅎㅎ
제가 수강생님 코드를 보고 싶어도.
코드 보기가 너무 힘듭니다.. ㅠ
0주차 - 질문하는 방법 참고하셔서 다시 질문 부탁드립니다.
감사합니다.