몽셀통통의 블로그
문제https://www.acmicpc.net/problem/2206 풀이최단 거리를 구하는 것 이므로 bfs 사용큐는 모두 3개가 필요한데 (x좌표, y좌표, 벽을 부순 횟수( 최대 1회 가능)) 이 세가지다bfs를 이동하면서 상하좌우 방향으로 이동하는데 상하좌우 뿐만아니라 다음 이동하는 원소가 1일 경우 벽을 부순 횟수를 1로 변경하여 계속해 나간다 중요한점은 visit[MAX][MAX][2]로 설정해야 한다.visit에서 벽을 하나도 안부순 경우(0)와 벽을 이미 부수고 지나간 경우(1)를 체크해 준다 코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include..
문제https://www.acmicpc.net/problem/7569 풀이전형적이고 간단한 bfs 문제상하좌우 뿐만아니라 앞뒤까지 포함하여 총 6방향으로 bfs로 돌리면된다큐를 시작하면서 모든 토마토가 익었다면 return 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include#includeusing namespace std; int M,N,H,ans;int arr[101][101][101];int visit[101][101][101];int dir[6][3]={{-1,0,0},{1,0,0},{0,-1,0},{0,0,1},{0,1,0..
문제https://www.acmicpc.net/problem/1018 풀이dfs를 이용체스판이 8X8이므로 이 체스판의 첫번째 위치만 for문으로 dfs를 돌린다첫번째가 B나 W로 시작하게 각각 돌려준다간단한 dfs 코드1234567891011121314151617181920212223242526272829303132333435363738#include using namespace std; int N, M,ans=10000000;char arr[51][51]; void dfs(int n, int m,int x, int y, char cha,int cnt) { if (y == m) { y = m-8; x += 1; if (x == n) { ans = ans > N >> M; for (int i = 0; i..