좋아요, 그래서 이것은 재미 있습니다. 저는 일본 체스 (쇼기라고도 함), 특히은 장군의 조각의 움직임을 코드화하려고합니다.게임 조각 운동 최적화; 특정 규칙이 주어지면 최소 움직임 수를 찾으십시오.
위치 (x, y)의 경우 조각은 (x-1, y + 1), (x, y + 1), (x + 1) 중 하나로 이동할 수 있습니다. , y + 1), (x-1, y-1) 또는 (x + 1, y-1) 다시 말해, 조각은 직접 대각선 또는 바로 위의 공간으로 이동할 수 있지만 왼쪽, 오른쪽 또는 아래로 직접 이동할 수 없습니다.
그래서 시작 위치 (sx, sy)와 최종 위치 (gx, gy)를 인수로 취해이 둘 사이의 가장 빠른 경로를 찾는 함수를 정의합니다. 시작과 끝 좌표가 수평선이나 수직선에 함께있는 경우에는 상황이 작동하는 것처럼 보일 수 있지만, 그 후에는 일이 멀어지기 시작합니다. 나는 조건을 놓치고 있는지, 또는 이것을 할 수있는 더 좋은 방법이 있는지 모르지만 함수는 주어진 인자로 작업해야한다. 아무도 올바른 방향으로 나를 가리킬 조언이 있습니까? 다음과 같이 내 코드는 다음과 같습니다
def minSteps(sx,sy,gx,gy):
count = 0
while [sx,sy] != [gx,gy]:
if (gy != sy and gx == sx):
if gy > sy:
sx = sx
sy += 1
count += 1
else:
sx += 1
sy -= 1
count += 1
elif (gy == sy and gx != sx):
if gx > sx:
sx += 1
sy += 1
count += 1
else:
sx -= 1
sy += 1
count += 1
elif (gy != sy and gx != sx):
if gy > sy:
if gx > sx:
sx += 1
sy += 1
count += 1
else:
sx -= 1
sy += 1
count += 1
if gy < sy:
if gx > sx:
sx += 1
sy -= 1
count += 1
else:
sx -= 1
sy -= 1
count += 1
return count