제목 1672: 미궁 문제 [데이터 구조]
제목 설명
샤 오 밍 은 미로 에 있 습 니 다. 샤 오 밍 을 도와 출발점 에서 종점 까지 의 가장 짧 은 길 을 찾 아 주세요.샤 오 밍 은 상하 좌우 네 방향 으로 만 이동 할 수 있다.
입력
여러 그룹의 테스트 데 이 터 를 입력 하 십시오.입력 한 첫 줄 은 T 조 테스트 데이터 가 있 음 을 나타 내 는 정수 T 입 니 다.각 조 가 입력 한 첫 줄 은 두 개의 정수 N 과 M (1 < = N, M < = 100) 이다.다음 N 줄 은 줄 마다 M 개의 문 자 를 입력 하고 모든 문 자 는 미로 의 작은 사각형 을 표시 합 니 다.문자 의 의 미 는 다음 과 같다. 'S': 출발점' E ': 종점' - ': 공 터 는' \ # ': 장 애 를 통 해 입력 데 이 터 를 통 해 있 고 출발점 과 종점 만 보장 할 수 없다.
출력
각 조 의 입력 에 대해 출력 은 출발점 에서 종점 까지 의 가장 짧 은 거리 이 고 출발점 에서 종점 까지 의 길이 존재 하지 않 으 면 출력 - 1.
샘플 입력
1
5 5
S-###
-----
##---
E#---
---##
샘플 출력
9
Code AND Analysis
First, it is a graph traversal and use the Depth First Traversal algorithm. For the dfs function, there are many problems which are really hidden. DFS 사고방식 은 다음 과 같다.바로 현재 위치 가 종점 위치 인지 아 닌 지 를 판단 하 는 것 이다. 4. 종점 이 아니 라 현재 위치의 상, 하, 좌, 우 를 옮 겨 다 니 는 것 이다.
질문
4. 567917. 2 단계 와 3 단 계 를 결합 하여 최종 기록 의 끝 위 치 를 확보 하 는 걸음 수가 가장 적다
4. 567917. 다음 단계 의 방향 은 2 층 순환 을 사용 하 는데 각각 x 와 y 방향의 순환 이지 만 이들 중 하 나 는 0 이 고 하 나 는 0 이 아니 어야 한다.매번 한 걸음 만 걸 을 수 있 기 때 문 이 야!!사실은 절대 치 로 판단 할 수 있다.
4. 567917. 이 단 계 는 중요 할 수 있 습 니 다.
#include
#include
#define MAXN 100
char dg[MAXN + 1][MAXN + 1];
int vi[MAXN + 1][MAXN + 1] = {
0 };
int stx, sty, endx, endy;
int dfs(int row, int col, int x, int y, int step)
{
//
if (x < 0 || y < 0 || x >= row || y >= col || vi[x][y] == -1) return 0;
//
if (vi[x][y] == 0 || vi[x][y] > step) vi[x][y] = step;
else return 0;
if (dg[x][y] == 'E') return 0;
int mx, my;
for (mx = -1; mx <= 1; mx++) {
for (my = -1; my <= 1; my++) {
//mx my 0 0
// 0 mx 0
if ((mx && my) || (mx == 0 && my == 0)) continue;
dfs(row, col, x + mx, y + my, step + 1);
}
}
return 1;
}
int solve(int row, int col)
{
int ans;
dfs(row, col, stx, sty, 0);
ans = vi[endx][endy];
ans = ans ? ans : -1;
return ans;
}
int main()
{
int L, i, j, row, col, ans;
scanf("%d", &L);
//
getchar();
while (L--) {
memset(vi, 0, sizeof(vi));
//
scanf("%d %d", &row, &col);
//
getchar();
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
dg[i][j] = getchar();
if (dg[i][j] == 'S') {
stx = i; sty = j;
}
if (dg[i][j] == 'E') {
endx = i; endy = j;
}
if (dg[i][j] == '#') {
vi[i][j] = -1;
}
}
//
getchar();
}
ans = solve(row, col);
printf("%d
", ans);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정규 표현 식 (python 3)정규 표현 식 은 문자 조작 에 대한 논리 적 공식 으로 미리 정 의 된 특정한 문자 와 특정한 문자 의 조합 으로 '규칙 문자열' 을 구성 하 는 것 입 니 다. match 는 문자열 의 시작 위치 에서 패턴 과 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.