HDU 2102 A 계획 (검색 대기 열)
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15950 Accepted Submission(s): 3985
Problem Description
불쌍 한 공 주 는 마왕 에 게 한 번 씩 납 치 돼 기사 들 에 게 구 조 된 후 불행 하 게 도 그녀 는 다시 생명의 시련 에 직면 하 게 되 었 습 니 다.마왕 은 T 시 에 공 주 를 잡 아 먹 을 것 이 라 고 메 시 지 를 보 냈 습 니 다. 공주 의 고 기 를 먹 어도 오래 살 수 있다 는 소문 을 믿 었 기 때 문 입 니 다.늙 은 왕 은 마음 이 급 하여 천하 의 용 사 를 불 러 공 주 를 구 하 겠 다 고 고 했 습 니 다.하지만 공 주 는 익숙 해 졌 습 니 다. 지 용의 기사 LJ 가 구 해 낼 수 있 을 거 라 고 믿 었 습 니 다.
현재 밀정 에 따 르 면 공 주 는 2 층 미궁 에 갇 혀 있다. 미궁 의 입 구 는 S (0, 0, 0) 이 고 공주 의 위 치 는 P 로 표시 하 며 시공 전송 기 는 \ # 로 표시 하고 벽 은 * 로 표시 하 며 평지 용 으로 표시 한다.기사 들 은 시공 전송 기 에 들 어가 면 다른 층 의 상대 적 인 위치 로 옮 겨 지지 만, 옮 겨 진 위치 가 벽 이 라면 기사 들 은 부 딪 혀 죽는다.기사 들 은 1 층 에서 한 칸 씩 이동 하 는 데 1 시간 이 걸린다.층 간 의 이동 은 시공 전송 기 를 통과 할 수 있 을 뿐 어떠한 시간 도 필요 없다.
Input
입력 한 첫 줄 C 는 모두 C 개의 테스트 데 이 터 를 표시 하고 테스트 데이터 의 앞 줄 마다 세 개의 정수 N, M, T 가 있다.N, M 미궁 의 크기 N * M (1 < = N, M < = 10). T 는 위 와 같다. 이 어 진 전 N * M 은 미궁 의 1 층 배치 상황 을 나타 내 고, 후 N * M 은 미궁 2 층 배치 상황 을 나타 낸다.
Output
기사 들 이 T 시간 에 공 주 를 찾 을 수 있다 면 'YES' 를 출력 하고 그렇지 않 으 면' NO '를 출력 한다.
Sample Input
1
5 5 14
S*#*.
.#...
.....
****.
...#.
..*.P
#.*..
***..
...*.
*.#..
Sample Output
YES
만 나 기만 하면 멍 해 져 요. 두 행렬 을 어떻게 검색 해 요. 붙 어서 검색 해 야 하나 요? 그 럴 리 가 없 죠. 전송 은 어떻게 해 요...................................................................................................대열 을 써 본 적 이 없 는데, 공부! 공부!!
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int m,n;
char smap[2][20][20];
int judge[2][20][20];
int go[2][4]={0,0,1,-1,-1,1,0,0};
struct point
{
int x,y,z;
int step;
};
queue<point> que;//
bool bfs()
{
while(!que.empty())
{
point now = que.front();
que.pop();
if(smap[now.z][now.x][now.y]=='P')
{
if(now.step>=0)
return true;
break;
}
point N;
for(int i=0;i<4;i++)
{
N.x=now.x+go[0][i];
N.y=now.y+go[1][i];
N.z=now.z;
N.step=now.step-1;
if(!(N.x>=0&&N.y>=0&&N.x<n&&N.y<m))//
continue;
if(smap[now.z][N.x][N.y]=='#')
N.z^=1;//
if(smap[N.z][N.x][N.y]!='*'&&N.step>=0&&!judge[N.z][N.x][N.y])
{
judge[N.z][N.x][N.y]=1;
que.push(N);
}
}
}
return false;
}
int main()
{
int t,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
point p;
while(!que.empty()) que.pop();// pop,
memset(judge,0,sizeof(judge));//
for(int i=0;i<2;i++)
for(int j=0;j<n;j++)//
{
scanf("%s",smap[i][j]);
}
for(int i=0;i<2;i++)
for(int j=0;j<n;j++)
for(int h=0;h<m;h++)
{
if(smap[i][j][h]=='S')
p.x=j,p.y=h,p.z=i,p.step=k;
else if(smap[i][j][h]=='#'&&(smap[i^1][j][h]=='#'||smap[i^1][j][h]=='*'))// ,
smap[i][j][h]='*',smap[i^1][j][h]='*';// , ,
}
judge[p.z][p.x][p.y]=1;
que.push(p);
if(bfs())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제1 6 장 파일 에서 텍스트 검색 도구: grep 명령 과 egrep 명령제1 6 장 파일 에서 텍스트 검색 도구: grep 명령 과 egrep 명령 옵션 grep 명령 파일 에서 단 어 를 검색 하면 명령 은 "match pattern"을 포함 하 는 텍스트 줄 을 되 돌려 줍 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.