UVa 439 - Knight Moves 검색 테마
2911 단어 move
13381
56.27%
5157
93.21%
제목 링크:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105&page=show_problem&problem=380
제목 유형: 검색
샘플 입력:
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
샘플 출력:
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from a1 to h8 takes 6 knight moves.
To get from a1 to h7 takes 5 knight moves.
To get from h8 to a1 takes 6 knight moves.
To get from b1 to c3 takes 1 knight moves.
To get from f6 to f6 takes 0 knight moves.
분석:
이 문제 도 매우 고전적 인 검색 입문 문제 다.문 제 는 장기 에서 말의 시작 위 치 를 지정 하고 목표 위치 와 함께 말 이 최소한 의 걸음 으로 목표 위치 에 도착 하도록 요구 하 는 것 이다.가장 짧 은 걸음 수 를 구 하 는 사람 은 일반적으로 BFS 로 하 는 것 이 좋다.
걸음 수 를 구 할 때 작은 기술 이 있 습 니 다. vis 배열 을 열 고 0 으로 초기 화 한 다음 에 이것 은 걸 어 가 는 걸음 수 를 기록 하 는 것 이 아니 라 걸 어 가 는 걸음 수 를 표시 하 는 데 사 용 됩 니 다.구체 적 으로 코드 참조
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char start[3], end[3];
int dir[8][2] = {{-2,1},{-1,2},{1,2},{2,1},
{2,-1},{1,-2},{-1,-2},{-2,-1}};
int vis[10][10];
struct Node{int x, y; };
Node que[1000];
void bfs(){
int front=0, rear=1;
que[0].x=start[0]-'a', que[0].y=start[1]-'0'-1;
vis[que[0].x][que[0].y] = 1;
while(front<rear){
Node t = que[front++];
// ,
if(t.x==end[0]-'a' && t.y==end[1]-'0'-1){
printf("To get from %s to %s takes %d knight moves.
", start,end,vis[t.x][t.y]-1);
return ;
}
for(int i=0; i<8; ++i){
int dx=t.x+dir[i][0], dy=t.y+dir[i][1];
if(dx>=0 && dx<8 && dy>=0 && dy<8 && !vis[dx][dy]){
vis[dx][dy] = vis[t.x][t.y]+1; //
Node temp;
temp.x=dx, temp.y=dy;
que[rear++] = temp;
}
}
}
}
int main(){
#ifdef LOCAL
freopen("input.txt", "r", stdin);
#endif
while(~scanf("%s %s", start, end) && start[0]){
memset(vis, 0, sizeof(vis));
bfs();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rvalue Reference In Cxx11Rvalue Reference In Cxx11 cxx11에서 모브의 의미를 통해copy constructor를 모브 constructor로 바꿀 수 있습니다. 예를 들어, CFoo의 copy construct는 다음...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.