혼종 꼬지마루
이 문제는 bfs + 비트마스킹을 이용한 문제 다만, 열쇠를 찾았을때, 지나온 곳에 그 문이 있을때 어떻게 처리해줘야 할지가 가장 중요합니다 제가 사용한 방법은, 열쇠가 없는 문을 만났을 때 다른 구조체 배열에 위치와 문의 알파벳을 저장 열쇠를 찾는다면, 찾은 열쇠로 열 수 있는 문(열쇠가 없는 문을 저장해 구조체배열)을 찾아서 다시 큐에 담아줍니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include #include #define MX 110using namespa..
BFS + 그래프를 이용하여 해결 가능 다시 풀기 싫은 문제... 다른방법이 있을지는 모르겠지만 개인적으로는 stl을 사용하여 Queue를 사용하면 못풀 것 같다는 생각이 드는 문제 배열을 2칸을 묶어서 1칸으로 쓰는 것도 중요하다 1. 입력을 받고, 배열 2칸을 1칸으로 만들어 문제와 똑같은 형태로 각 칸에 번호를 매긴다 2. 각 정점에서 문제 조건에 맞는 갈 수 있는 방향을 그래프로 만들어 준다. 3. 이 그래프를 시작으로 BFS탐색 시작! 4. 문제의 조건 중 '도착할 수 없다면 가장 큰 위치로 이동한다'이 조건을 위해 번호가 크다면 계속 갱신을 시켜주고, 이 경로를 추적하기 위해 큐에 들어가는 정보 중 이전 큐의 위치, 즉 탐색을 하는 위치의 큐넘버를 함께 담아준다 5. 문제의 조건에 맞게 출력!..
BFS에 올리긴 했지만, 다익스트라 문제 벽 부수고 이동하기와 같은 문제인 듯 하지만, 이동거리가 최소가 아닌, 벽을 최소로 부수는 것 1. visit배열을 선언해서 최대값으로 초기화 2. BFS탐색을 하면서 벽이 있는 것을 dis로 계산해서 이동위치가 최소가 되는 지점만 큐에 담는다 3. 도착위치에 있는 visit을 출력 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include #define MX 102using namespace std; struct ALGO { int x, y;}q[MX*MX*MX]; int map[MX][MX], visit[MX][MX];int dx[] = { ..