본문 바로가기
Programming/Algorithm

swe 1219 Ladder1

by OKOK 2018. 3. 28.

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();

}