bfs에서 순서 알고 싶을때는 현재값 = 이전값 + 1
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<bits/stdc++.h> #define MAX 0x12345678 using namespace std; int matrix[101][101]; int visitedList[101][101]; int tbrl[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; int N,M; int result = MAX; bool isInMatrix(int y, int x){ return (y <= N) && (y >0) && (x <= M) && (y >0); } void bfs(){ queue<pair<int, int> > que; que.push(pair<int, int>(1, 1)); visitedList[1][1] = 1; while(!que.empty()){ pair<int, int> tmp = que.front(); int y = tmp.first; int x = tmp.second; que.pop(); for(int i = 0 ; i < 4; i++){ int yi = y + tbrl[i][0]; int xi = x + tbrl[i][1]; if(isInMatrix(yi, xi) && !visitedList[yi][xi] && matrix[yi][xi]){ que.push(pair<int, int>(yi, xi)); visitedList[yi][xi] = visitedList[y][x] + 1; } } } cout << visitedList[N][M] << endl; } int main(){ cin >> N >> M; memset(visitedList, 0, sizeof(visitedList)); for(int i=1; i <= N; i++){ string tmp; cin >> tmp; for(int j=1; j<=M; j++){ if(tmp[j - 1] == '1') matrix[i][j]=1; else matrix[i][j]=0; } } bfs(); return 0; } | cs |
'* Computer Science > Algorithm' 카테고리의 다른 글
baekjun 10942. 팰린드롬? (0) | 2018.10.31 |
---|---|
baekjun 1890. jump (0) | 2018.10.30 |
baekjun 11048. 이동하기 (0) | 2018.10.29 |
baekjun 바이러스 (0) | 2018.10.29 |
baekjun 7569. 토마토2 (0) | 2018.10.05 |