Saving Princess claire_&&http://acm.hdu.edu.cn/showproblem.php?pid=4308
AC 코드:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<queue>
#include<set> Q;
#define N 5005
using namespace std;
typedef struct node
{
int x;
int y;
int step;
bool flag;
bool operator<(const node& a)
{return a.step<step;}
}Node;
char map[N][N];
Node now,last,cur;
int endx,endy;
int n,m,cost;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
queue<Node>Q;
int bfs()
{
queue<Node>Q1;
now.step=0;
now.flag=0;
Q1.push(now);
map[now.x][now.y]='#';
while(!Q1.empty())
{
cur=Q1.front();
Q1.pop();
int sa=cur.x;
int sb=cur.y;
int step=cur.step;
int flag=cur.flag;
if(flag)
{
while(!Q.empty())
{
now=Q.front();
Q.pop();
int a=now.x;
int b=now.y;
if(map[a][b]!='#')
{
now.x=a,now.y=b,now.step=step,now.flag=1,Q1.push(now);
map[a][b]='#';
}
}
}
for(int i=0;i!=4;++i)
{
int xx=sa+dx[i];
int yy=sb+dy[i];
if(xx==endx&&yy==endy) return step;
if(xx>=0&&xx<n&&yy>=0&&yy<m&&map[xx][yy]!='#')
{
now.x=xx,now.y=yy;
if(map[xx][yy]=='*') {now.step=step+cost,now.flag=0;}
else if(map[xx][yy]=='P'){now.step=step;now.flag=1;}
Q1.push(now),map[xx][yy]='#';
}
}
}return -1;
}
int main()
{
while(cin>>n>>m>>cost)
{
memset(map,'0',sizeof(map));
for(int i=0;i<n;i++)
{ cin>>map[i];
for(int j=0;j<m;j++)
{
if(map[i][j]=='Y'){now.x=i;now.y=j;}
else if(map[i][j]=='C') {endx=i;endy=j;}
else if(map[i][j]=='P') {last.x=i,last.y=j;Q.push(last);}
}
}
int ans=bfs();
if(ans==-1) cout<<"Damn teoy!"<<endl;
else cout<<ans<<endl;
}return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.