1. queue 를 연습하였습니다. 2. 재밌네요. |
/* 1210 Ladder1 1540 시작합니다. */ #include <iostream> #include <algorithm> using namespace std; #define SIZE 100 // 100 struct point { int x, y; }que[SIZE*SIZE]; int x, y, nx, ny; int dx[] = { 0,0,-1 }; // 동 서 북 int dy[] = { 1,-1,0 }; int map[SIZE][SIZE]; int visit[SIZE][SIZE]; int ans; int front, rear; void problemIn() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { cin >> map[i][j]; if (map[i][j] == 2) { rear++; que[rear].x = i; que[rear].y = j; visit[i][j] = 1; } } } } void init() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { visit[i][j] = 0; } } rear = front = -1; } void bfs() { while (front != rear) { front++; x = que[front].x; y = que[front].y; if (x == 0) { ans = y; break; } for (int i = 0; i < 3; i++) { nx = x + dx[i]; ny = y + dy[i]; if (nx >= 0 && ny >= 0 && nx < SIZE && ny < SIZE) { if (map[nx][ny] == 1 && visit[nx][ny] == 0) { visit[nx][ny] = 1; rear++; que[rear].x = nx; que[rear].y = ny; if (i != 2) { break; } } } } } } void solve() { bfs(); } int main() { for (int i = 0; i < 10; i++) { int tc; rear = front = -1; cin >> tc; problemIn(); solve(); cout << "#" << tc << " " << ans << endl; init(); } } |