본문 바로가기
Computer Science

미로1

by OKOK 2019. 1. 22.

1. 큐 사용 방법

2. 오케이

3. 이렇게 풀이

4. 나중에 링크드 리스트 문제에는 어떻게 풀이할지 궁금 


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
#include <stdio.h>
#define SIZE 16
 
const int dy[4= { -1,0,1,0 }; // 상 우 하 좌
const int dx[4= { 0,1,0,-1 };
int maze[SIZE][SIZE];
int xQ[SIZE * SIZE + 10]; // * 에다가 스페이스 + 한 것임
int yQ[SIZE * SIZE + 10];
int front, rear;
 
void nQ(int yy, int xx)
{
    xQ[rear] = xx;
    yQ[rear] = yy;
    maze[yy][xx] = 1;
    ++rear; // 넣을 때 rear++를 하고,
}
 
int main()
{
    freopen("input.txt""r", stdin);
    int T, test_case;
    int nx, ny;
    int flag;
    int desx, desy;
    int i, j;
 
    for (T = 1; T <= 10++T)
    {
        front = rear = 0;
        flag = 0;
        scanf("%d"&test_case);
        for (i = 0; i < SIZE; ++i)
        {
            for (j = 0; j < SIZE; ++j)
            {
                scanf("%1d"&maze[i][j]);
                if (maze[i][j] == 2)
                    nQ(i, j);
                if (maze[i][j] == 3)
                {
                    desy = i; // 세로
                    desx = j; // 가로
                }
            }
        }
        while (front < rear)
        {
            if ((yQ[front== desy) && (xQ[front== desx))
            {
                flag = 1;
                break;
            }
            for (i = 0; i < 4++i)
            {
                ny = yQ[front+ dy[i];
                nx = xQ[front+ dx[i];
                if (maze[ny][nx] != 1// 1이 아니면 이동 가능
                    nQ(ny, nx);
            }
            ++front//하나의 front에 대해서 상하좌우 4방향에 대해서 검사를 진행함
        }
        printf("#%d %d\n", test_case, flag);
    }
    return 0;
}
cs

 


'Computer Science' 카테고리의 다른 글

암호문 3  (0) 2019.01.23
암호문3  (0) 2019.01.22
암호생성기  (0) 2019.01.22
계산기2  (0) 2019.01.22
계산기1  (0) 2019.01.22

댓글