HDOJ - 1072 - Nightmare 문제 풀이 보고서
나의 문제 풀이 방향: 먼저 가장 짧 은 시간 을 구하 고 BFS 로 한 다음 에 여기 리 셋 시간 이라는 장치 가 있 습 니 다. 저 는 모든 점 에 남 은 시간 에 변 수 를 설정 하면 한 걸음 걸 을 때마다 변 수 를 줄 이 고 리 셋 장치 에 도착 할 때 남 은 시간 을 6 으로 설정 합 니 다.우 리 는 종점 에 도착 하 는 가장 짧 은 시간 을 요구 하기 때문에 폭탄 은 아직 폭발 하지 않 았 으 면 됩 니 다. 그래서 저 는 vis 배열 로 이 점 에 도착 하 는 가장 짧 은 시간 을 저장 하고 초기 vis 배열 은 모두 - 1 로 설정 합 니 다.또한 리 셋 기 위 치 를 표시 해 야 합 니 다. 사용 한 후에 사용 할 수 없습니다. 그러면 무한 BFS 를 방지 할 수 있 습 니 다.모든 점 에서 현재 시간 이 vis 보다 짧 은 지 판단 합 니 다. 예, vis 를 현재 시간 으로 설정 합 니 다. 물론 vis 가 - 1 이면 바로 값 을 부여 합 니 다.마지막 으로 남 은 시간 이 1 일 때 종점 에 도착 하지 않 았 거나 사용 하지 않 은 리 셋 지점 에 도착 하지 않 았 을 때 우 리 는 계속 검색 하 는 것 을 멈 춰 야 한다. 아무리 다음 단 계 를 걸 어도 폭발 할 것 이기 때문이다.
다음은 제 문제 풀이 코드 입 니 다. BFS 문제 풀이.
#include
#include
#include
#include
#include
using namespace std;
#define N 10
struct point //
{
int x, y; //
int remain; //
int step; // ,
};
int n, m, t;
int map[N][N];
int vis[N][N]; //
point start, end; //
queue q;
void Read(); //
void Init(); //
void DataProcess(); //Bfs
int main()
{
scanf("%d", &t);
while (t--)
{
Read();
Init();
DataProcess();
}
return 0;
}
void Read()
{
int i, j;
scanf("%d %d", &n, &m);
for (i=0; i b.step) vis[b.x][b.y] = b.step;
q.push(b);
}
if (a.x - 1 >= 0 && map[a.x-1][a.y] != 0)
{
b = a;
b.x = a.x - 1;
b.step++;
b.remain--;
if (map[b.x][b.y] == 4 && vis[b.x][b.y] == -1) b.remain = 6;
if (vis[b.x][b.y] == -1 || vis[b.x][b.y] > b.step) vis[b.x][b.y] = b.step;
q.push(b);
}
if (a.y + 1 < m && map[a.x][a.y+1] != 0)
{
b = a;
b.y = a.y + 1;
b.step++;
b.remain--;
if (map[b.x][b.y] == 4 && vis[b.x][b.y] == -1) b.remain = 6;
if (vis[b.x][b.y] == -1 || vis[b.x][b.y] > b.step) vis[b.x][b.y] = b.step;
q.push(b);
}
if (a.y - 1 >= 0 && map[a.x][a.y-1] != 0)
{
b = a;
b.y = a.y - 1;
b.step++;
b.remain--;
if (map[b.x][b.y] == 4 && vis[b.x][b.y] == -1) b.remain = 6;
if (vis[b.x][b.y] == -1 || vis[b.x][b.y] > b.step) vis[b.x][b.y] = b.step;
q.push(b);
}
}
printf("%d
", vis[end.x][end.y]); // vis
return;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AWS에서 사용하는 SSL 인증서 관리를 IAM에서 ACM으로 변경해야 하는 이유자신이 담당하는 시스템에서 ELB에 등록한 SSL 인증서를 IAM 관리에서 ACM 관리로 변경했습니다. AWS 기능을 사용하여 SSL 인증서를 관리하는 방법에는 두 가지가 있습니다. IAM을 이용하는 방법과 ACM을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.