본문 바로가기

BFS

(6)
[C++] BOJ-9569 문제풀이 1. 3차원배열에서 bfs를 돌려주는 문제다. 2. 큐에 x,y,z좌표를 넣고 인접해있는 값이 0(익지 않은 토마토)이면 (현재 좌표값) + 1 을 해준 값을 인접하고 있는 배열에 집어넣는다. 3. 이 과정을 반복하여 마지막에 좌표에 넣었던 숫자를 반환한다. 4. 모든 과정이 끝난 후에도 0이 발견되면 -1을 반환한다. 38분 18초 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 7..
[C++] BOJ-1012 문제풀이 배추를 찾은 후 BFS로 탐색 서로 떨어져 있는 배추를 찾을때마다 count 해주는 방식으로 문제 해결 #include #include using namespace std; int map[51][51]; int dx[4] = {0,0,-1,1}; // 상하좌우 int dy[4] = {1,-1,0,0}; queue q; int T,N,M,K; int X,Y; int bfs(){ int cnt = 0; for(int i = 0; i> N >> K; for(int i = 0; i> X >> Y; map[Y][X] = 1; } cout
[C++] BOJ-7576 문제풀이 다른 BFS 문제와 마찬가지로 queue에 x좌표와 y좌표를 넣으면서 BFS를 돌리면 된다. 날짜가 지날때마다 토마토가 들어있지 않은 경우가 아니라면 인접한 배열을 1로 교체해주었다. 다른 BFS 문제와 다른점은 이 문제에서는 익지 않은 토마토가 있을 수 있기 때문에 그 경우까지 생각해줘야 한다. 나같은 경우 BFS로 모든 맵을 돌린 후 마지막에 map 배열에 0이 하나라도 존재한다면 -1을 return을 해주는 조건문을 하나 더 추가해주었다. #include #include using namespace std; int dx[4] = {0,0,-1,1}; // 상하좌우 int dy[4] = {1,-1,0,0}; int N,M; int map[1001][1001]; int cnt; queue< p..
[C++] BOJ-4963 문제풀이 풀이 전에 풀었던 유기농배추가 비슷한 방식으로 풀었다. 다른점이 있다면 유기농배추 문제는 상하좌우 네 방향만 탐색했지만 이 문제는 대각선도 이어져 있다고 보기 때문에 8방향을 탐색했다. 나는 BFS로 풀었지만 다시 생각해보니 DFS로 코드를 짜는게 훨씬 더 효율적일 것 같은 생각이 들었다... #include #include using namespace std; queue q; int dx[8] = {0,0,1,-1,1,-1,1,-1}; int dy[8] = {1,-1,0,0,1,-1,-1,1}; int map[51][51]; int bfs(int N, int M){ int cnt = 0; for(int i = 0; i h; if(w==0 && h == 0) break; for(int i ..
[C++] BOJ-1012 문제풀이 BOJ-1012 문제풀이 풀이 작성중.. 전체 소스코드 #include #include using namespace std; int map[51][51]; int dx[4] = {0,0,-1,1}; // 상하좌우 int dy[4] = {1,-1,0,0}; queue q; int T,N,M,K; int X,Y; int bfs(){ int cnt = 0; for(int i = 0; i> N >> K; for(int i = 0; i> X >> Y; map[Y][X] = 1; } cout
[C++] 카카오 프렌즈 컬러링북 Kakao2017 LEVEL 3 문제풀이 빈 공간이 아닌 부분을 찾아서 BFS를 돌리고 변수에 각각 영역의 수와 가장 큰 영역의 칸 수를 저장하면 된다. 전체 소스코드 #include #include #include using namespace std; int dx[4] = {-1,1,0,0}; // 상 하 좌 우 int dy[4] = {0,0,-1,1}; int cnt, max_ar, tmp_ar, ar, cnt_ar; void bfs(int n, int m, vector picture){ max_ar = tmp_ar = ar = cnt_ar = 0; queue q; vector visit(m,vector(n,false)); for(int i = 0; i