๋ค ๋ฐฉํฅ ํ์ถ ๊ฐ๋ฅ ์ฌ๋ถ ํ๋ณํ๊ธฐ
n * m ํฌ๊ธฐ์ ์ด์ฐจ์ ์์ญ์ ์ข์ธก ์๋จ์์ ์ถ๋ฐํ์ฌ ์ฐ์ธก ํ๋จ๊น์ง ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋์ ํ ๋์๋ ๋ฐ๋์ ์ํ์ข์ฐ์ ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ฑ์ด ์๋ ์นธ์ผ๋ก๋ ์ด๋์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋ฑ์ด ๋ฐฐ์น ๋์ด ์๋ ๊ฒฝ์ฐ ์ค์ ๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก ํ์ถ์ ํ ์ ์์ต๋๋ค. ์ด ๋ ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์ธ์.
์ ๋ ฅ ํ์
์ฒซ๋ฒ์งธ ์ค์๋ n๊ณผ m์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๊ณ ,
๋๋ฒ์งธ ์ค๋ถํฐ (n+1)๋ฒ์งธ ์ค๊น์ง๋ ๊ฐ ํ์ ๋ฑ์ด ์๋ ๊ฒฝ์ฐ 1, ๋ฑ์ด ์๋ ๊ฒฝ์ฐ 0์ด ์ ๋ ฅ์ผ๋ก ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค. ์์ ์นธ๊ณผ ๋ ์นธ์๋ ๋ฑ์ด ์ฃผ์ด์ง์ง ์๋๋ค๊ณ ๊ฐ์ ํด๋ ์ข์ต๋๋ค.
- 2 ≤ n, m ≤ 100
์ถ๋ ฅ ํ์
์ข์ธก ์๋จ์์ ์ถ๋ฐํ์ฌ ์ฐ์ธก ํ๋จ๊น์ง ๋ฑ์๊ฒ ๋ฌผ๋ฆฌ์ง ์๊ณ ํ์ถ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด 1, ์์ผ๋ฉด 0์ ์ถ๋ ฅํฉ๋๋ค.
๋์ ํ์ด
#include <iostream>
#include <queue>
using namespace std;
#define MAX_N 100
#define MAX_M 100
int n, m;
int a[MAX_N][MAX_M];
// bfs์ ํ์ํ ๋ณ์๋ค ์
๋๋ค.
queue<pair<int, int> > q;
bool visited[MAX_N][MAX_M];
bool InRange(int x, int y) { // ๊ฒฉ์ ์์ธ์ง
return 0 <= x && x < n && 0 <= y && y < m;
}
bool CanGo(int x, int y) { // ๊ฒฉ์ ์, ๋ฑ์ด ์์, ๋ฐฉ๋ฌธํ์ ์์
return InRange(x, y) && a[x][y] && !visited[x][y];
}
bool bfs(int x, int y){
int dx[4] = {1,0,0,-1};
int dy[4] = {0,1,-1,0}; // ๊ฒฉ์์ด๋ฏ๋ก
q.push(make_pair(x,y));
visited[x][y]=1;
while(!q.empty()){
pair<int,int> a = q.front();
q.pop();
for(int i=0; i<4; ++i){
int new_x = a.first + dx[i];
int new_y = a.second + dy[i];
if(CanGo(new_x, new_y)){
visited[new_x][new_y] = 1;
q.push(make_pair(new_x, new_y));
}
}
}
cout << visited[n-1][m-1];
}
int main() {
cin>>n>>m;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
cin>>a[i][j];
}
}
bfs(0,0);
return 0;
}
ํ์ ์ด๋ ต๋ค...
๊ฒฉ์ ๋ฌธ์ ์ด๋ฏ๋ก ์ํ์ข์ฐ 4 ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๊ณ ,
pair ๋ง๋ค์ด์ pushํด์ผํจ