모든 경우의 수를 탐색하여 찾는 방법
순열에서 이전에 뽑은 index 보다 큰 index 뽑으면 조합
1) 종료 조건
2) 재귀 확장
꼭 기억할것
상 : [y-1][x], 하 : [y+1][x], 좌 : [y][x-1], 우 : [y][x+1]
좌상 : [y-1][x-1] , 좌하 : [y+1][x-1], 우상 : [y-1][x+1], 우하 : [y+1][x+1]
target의 상,하,좌,우 값을 탐색 하는 것
int dy[] = { -1, 1, 0, 0 };
int dx[] = { 0, 0, -1, 1 };
또는
int delta[][] = {{-1,0}, {1,0}, {0,-1},{0,1}};
target의 상,하,좌,우,좌상,좌하,우상,우하
즉 상,하,좌,우, 모든 대각선 방향 값을 탐색 하는 것
❗dy[]와 dx[]배열을 처리 할때,
위의 좌표 이미지에서 12시를 기준으로 시계방향으로 돌아가며 값을 초기화해주면 된다.
int dy[] = { -1, -1, 0, 1, 1, 1, 0, -1};
int dx[] = { 0, 1, 1, 1, 0, -1, -1, -1};
또는
int delta[][] = {{-1,0}, {-1,1}, {0,1}, {1,1}, {1,0}, {1,-1},{-1,-1}};
❗ delta 탐색 시 해당 배열의 범위를 벗어나지 않도록 예외처리를 해주는 것을 주의하자!
int now_y = y + dy[d];
int now_x = x + dx[d];
또는
int now_y = y + delta[i][0];
int now_x = x + delta[i][1];
...
//범위를 벗어나는 값 예외처리
if(now_y<0 || now_x<0 || now_y>=N || now_x>=N) continue;
또는
if(now_y>=0 || now_x>=0 || now_y<N || now_x<N ) continue;