#include <stdio.h>
int BIG;
int BIGMAP[110][110];
int SMALL;
int SMALLMAP[110][110];
int main(void)
{
freopen("1.txt", "r", stdin);
// 여기서부터 작성
scanf("%d", &BIG);
for (int i = 1; i <= BIG; i++)
for (int j = 1; j <= BIG; j++)
scanf("%1d", &BIGMAP[i][j]);
int count = 0;
scanf("%d", &SMALL);
for (int i = 0; i < SMALL; i++)
for (int j = 0; j < SMALL; j++)
scanf("%1d", &SMALLMAP[i][j]);
int dir;
int tmpcnt = 0;
for (int i = 1; i <= BIG - SMALL + 1; i++) {
for (int j = 1; j <= BIG - SMALL + 1; j++) {
for ( dir = 0; dir < 4; dir++)
{
for (int i = 0; i<SMALL / 2; i++) {
for (int j = i; j<SMALL - i - 1; j++) {
int tmp = SMALLMAP[i][j];
SMALLMAP[i][j] = SMALLMAP[j][SMALL - i - 1];
SMALLMAP[j][SMALL - i - 1] = SMALLMAP[SMALL - i - 1][SMALL - j - 1];
SMALLMAP[SMALL - i - 1][SMALL - j - 1] = SMALLMAP[SMALL - j - 1][i];
SMALLMAP[SMALL - j - 1][i] = tmp;
}
}
if (BIGMAP[i][j] == SMALLMAP[0][0])
{
int check = 1;
for (int x = 0; x < SMALL; x++) {
for (int y = 0; y < SMALL; y++) {
if (BIGMAP[i + x][j + y] != SMALLMAP[x][y])
{
//printf("==>[NOT MATCHED!] [dir:%d] i: %d j: %d -> x: %d, y: %d\n", dir, i, j, x, y);
check = 0;
}
else {
tmpcnt++;
//printf("==>[%d MATCHED, cnt:%d][dir:%d] i: %d j: %d -> x: %d, y: %d\n", tmpcnt, count, dir, i, j, x, y);
}
if (check == 0) {
break;
}
}
}
tmpcnt = 0;
if (check == 1)
count++;
}
}
}
}
printf("%d", count);
return 0;
}
'Algorithm > DFS' 카테고리의 다른 글
정올 그래프 칠하기, 좋은 수열 (0) | 2016.08.25 |
---|---|
DFS 정복!! 레벨 별 (0) | 2016.06.22 |
예산 관리 (0) | 2016.06.18 |
정올 더하기 (0) | 2016.06.17 |
단지번호 붙이기 - 정올 1695번 (2) | 2016.02.25 |