bfs 연습문제
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | /*6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1*/ #include <iostream> #include <algorithm> #include <list> #include <cstring> using namespace std; int M, N; int box[1001][1001]; int visitedList[1001][1001]; /* 0 : raw tomato -1 : empty 1 : cooked tomato */ int main(){ int rawCnt = 0; memset(visitedList, -1, sizeof(visitedList)); list<pair<int, int>> que; cin >> M >> N; for(int i = 1; i <= N; i++) for(int j = 1; j <= M; j++){ cin >> box[i][j]; if(box[i][j] == 1){ que.push_front(make_pair(i, j)); visitedList[i][j] = 1; } else if(box[i][j] == 0){ visitedList[i][j] = 0; rawCnt++; } else { visitedList[i][j] = -1; } } int day = 0; while(rawCnt){ day++; list<pair<int, int>> buf; if(que.empty()){ cout << -1; return 0; } while(!que.empty()){ pair<int, int> ret = que.back(); int i = ret.first, j=ret.second; que.pop_back(); if(i-1 > 0){ if(visitedList[i-1][j] == 0){ rawCnt--; //cout << "rawCnt : " << rawCnt << endl; buf.push_back(make_pair(i-1, j)); visitedList[i-1][j] = 1; } } if(i + 1 <= N){ if(visitedList[i+1][j] == 0){ rawCnt--; //cout << "rawCnt : " << rawCnt << endl; buf.push_back(make_pair(i+1, j)); visitedList[i+1][j] = 1; } } if(j-1 > 0){ if(visitedList[i][j-1] == 0){ rawCnt--; //cout << "rawCnt : " << rawCnt << endl; buf.push_back(make_pair(i, j-1)); visitedList[i][j-1] = 1; } } if(j+1 <= M){ if(visitedList[i][j+1] == 0){ rawCnt--; //cout << "rawCnt : " << rawCnt << endl; buf.push_back(make_pair(i, j+1)); visitedList[i][j+1] = 1; } } } que = buf; /*for(int q = 1; q <= N ; q++){ for(int w = 1; w <=M; w++){ cout << visitedList[q][w] << " "; } cout << endl; } cout <<endl;*/ } cout << day; return 0; } | cs |
'* Computer Science > Algorithm' 카테고리의 다른 글
baekjun 바이러스 (0) | 2018.10.29 |
---|---|
baekjun 7569. 토마토2 (0) | 2018.10.05 |
baekjun 조세푸스 수열 (0) | 2018.08.27 |
baekjun 1966. printerQueue (0) | 2018.08.24 |
baekjun 9012. 괄호 (0) | 2018.08.22 |