체스 프로그램을 개발할 때 지정된 값으로 아래 방향 배열을 초기화하는 것의 의미는 무엇입니까?
저는 경쟁 프로그래밍에 익숙하지 않습니다.또한 많은 훌륭한 코더의 코드에는 다음 4행(특히 어레이와 관련된 코드)이 포함되어 있습니다.
int di[] = { 1, -1, 0, 0, 1, -1, 1, -1 };
int dj[] = { 0, 0, 1, -1, 1, -1, -1, 1 };
int diK[] = { -2, -2, -1, 1, 2, 2, 1, -1 };
int djK[] = { -1, 1, 2, 2, 1, -1, -2, -2 };
이것은 실제로 무엇을 의미하며 어떤 기술에 사용되는가?
이것은 모든 방향을 어레이로 인코딩하는 기술입니다.모든 쌍은di[i],dj[i]
다른 방향입니다.
x, y 위치에 부품이 있다고 가정하고 x와 y 값을 더해서 가까운 위치로 이동한다고 가정하면 1.0은 동쪽, -1.0은 서쪽, 0.1은 남쪽, 0-1은 북쪽입니다.
(여기에서는 왼쪽 위가 0.0, 오른쪽 아래가 4,4라고 했습니다만, 어레이의 각 인덱스가 중앙점 X에서 2.2로 이동하는 것을 나타내고 있습니다).
.....
.536.
.1X0.
.724.
.....
셋업 방식으로는^1
(^
비트 단위 XOR인 경우) 인덱스에 반대 방향이 표시됩니다. 0과 1은 반대 방향, 2와 3은 반대 방향입니다. (또 다른 설정 방법은 북쪽에서 시계 방향으로 가는 것입니다.)^4
반대 방향으로 이동합니다.)
이제 특정 지점에서 모든 방향을 테스트할 수 있습니다.di
그리고.dj
어레이는, 각 방향을 독자적인 행에 쓸 필요가 없습니다(총 8개). (경계 체크하는 것을 잊지 말아 주세요:)
diK
그리고.djK
모든 인접 방향 대신 모든 기사 방향을 형성합니다.여기서,^1
한 축을 따라 뒤집히고^4
상대편 기사에게 도약의 기회를 줄 것이다.
.7.6.
0...5
..K..
1...4
.2.3.
파타슈의 설명을 이해하기 어렵다고 생각하시는 분들을 위해 설명하겠습니다.
체스판의 주어진 지점에서 가능한 모든 움직임을 고려한다고 상상해 보세요.
di 및 dj 어레이를 루프하여 di 값을 x 오프셋으로 해석하고 dj 값을 y 오프셋으로 해석하면 가능한 각 8개 방향을 커버할 수 있습니다.
양의 x가 동쪽이고 양의 y가 남쪽이라고 가정하면(Patashu의 답변과 같이) 다음과 같이 됩니다.
| di/x | dj/y | 방향--+------+------+-----------0 | 1 | 0 | 동쪽1 | - 1 | 0 | west2 | 0 | 1 | 남쪽3 | 0 | - 1 | 북4 | 1 | 1 | 남동부5 | - 1 | - 1 | 북서쪽6 | 1 | - 1 | 북동쪽7 | -1 | 1 | 남서
diK 배열과 djK 배열은 나이트 피스의 가능한 이동을 설정하기 위해 동일하게 해석할 수 있습니다.체스에 익숙하지 않은 경우 나이트는 한 방향으로 두 개의 정사각형, 그리고 그것과 직각으로 한 개의 정사각형을 L 패턴으로 이동합니다(또는 그 반대).
| diK/x | djK/y | 방향--+-------+-------+----------------0 | - 2 | - 1 | 서쪽 2, 북쪽 11 | - 2 |1 |2 서, 1 남2 | - 1 |2 | 서향 1, 남향 23 | 1 | 2 | 1 East, 2 South4 | 2 | 1 | 동쪽 2, 남쪽 15 | 2 | - 1 | 동쪽 2, 북쪽 16 | 1 | - 2 | 동쪽 1, 북쪽 27 | - 1 | - 2 | 서쪽 1, 북쪽 2
정의된 배열을 사용하는 모든 방향에서 가능한 이동량을 확인하기 위한 코드 조각입니다.
int di[] = { 1, -1, 0, 0, 1, -1, 1, -1 };
int dj[] = { 0, 0, 1, -1, 1, -1, -1, 1 };
int movesPossible[8];
int move = 0;
int posx, posy; // position of the figure we are checking
for (int d=0; d<8; d++) {
for (move = 1; board.getElt(posx+di[d]*move, posy+dj[d]*move)==EMPTY; move++) ;
movesPossible[d] = move-1;
}
언급URL : https://stackoverflow.com/questions/16349925/what-is-the-significance-of-initializing-direction-arrays-below-with-given-value
'programing' 카테고리의 다른 글
Nuxt/Vue.js - 프로포트를 기반으로 자 컴포넌트에 동적으로 로드 (0) | 2022.08.07 |
---|---|
Vue.js에서 가져온 소스에서 개체의 실제 값 가져오기 (0) | 2022.08.07 |
비동기 데이터 - nuxtjs에서 컴포넌트 메서드에 액세스합니다. (0) | 2022.08.07 |
C에서 .h 파일의 비정상적인 사용 (0) | 2022.08.07 |
vuex mapState는 namesched:false인 경우에도 모듈 이름을 항상 인수로 요구합니다. (0) | 2022.08.07 |