사타리타기!!!!
시작을 전부 뒤져서 찾을 필요가 전~~~~~~~혀 없다.
x부터 거꾸로 올라가면 한 방에 해결!!!!!!!
큐도 필요없이..그냥 거꾸로 올라가면서 1만 쭉~따라가면 된다.
주의해야하는 것은!!!
나는
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
for (int k = 0; k < 4; k++)
{
int xx = X + dx[k];
int yy = Y + dy[k];
if (map[yy][xx] == 1)
{
X += dx[k];
Y += dy[k];
map[Y][X] = 2;
break;
}
}
위와 같은 방법을 써써 상하좌우 4방을 살피는데...
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
와 같이 y축의 1을 먼저 찾으면 엉뚱한 결과가 나온다!!!길을 가다가 가로가 나오면 가로부터 들어가야하니!!!!! 주의바람.
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 67 68 | #include <stdio.h> #include <string.h> typedef struct { int x; int y; } point; int map[111][111]; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; point Finish; point Start; int main() { for (int i = 1 ; i <= 10 ; i++) { int T; memset(map, 0, sizeof(map)); Finish.x = 0; Finish.y = 0; Start.x = 0; Start.y = 0; scanf("%d",&T); for (int a = 0; a < 100;a++) { for (int b = 0; b < 100; b++) { scanf("%d",&map[a][b]); if (map[a][b] == 2) { Finish.y = a; Finish.x = b; } } } int X = Finish.x; int Y = Finish.y; while (1) { for (int k = 0; k < 4; k++) { int xx = X + dx[k]; int yy = Y + dy[k]; if (map[yy][xx] == 1) { X += dx[k]; Y += dy[k]; map[Y][X] = 2; break; } } if (Y == 0) { printf("#%d %d\n", i, X); break; } } } return 0; } | cs |
'SW 업무 관련 > SW Expert Academy' 카테고리의 다른 글
2805. 농작물 수확하기 (0) | 2018.07.19 |
---|---|
1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) | 2018.07.18 |
1238. [S/W 문제해결 기본] 10일차 - Contact (0) | 2018.07.14 |
1219. [S/W 문제해결 기본] 4일차 - 길찾기 (0) | 2018.07.11 |
1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2018.07.06 |