2018 년 전국 다 교 알고리즘 겨울방학 캠프 연습 경기 (4 차 전) G - 노자 의 이탈리아 포 는?

링크:https://www.nowcoder.com/acm/contest/76/G
우 객 망
제목 설명
태원 현성 을 공격 한 후 이 운 룡 이라는 이탈리아 포 는 더욱 순조롭게 사용 되 었 다. 어디 를 때 려 도 결코 모호 하지 않다 는 뜻 이다. 그래서 소 야 대장 은 독립 단 포병 영 을 미 친 듯 이 공격 하기 시작 했다. 병사 들 이 이탈리아 포 를 이동 하 는 능력 을 단련 하기 위해 이 단장 은 포병 영 에 특 훈 을 실시 하기 시작 했다.포탄 세 부분 으로 이 뤄 져 현재 이 단장 은 양 촌 에 진 지 를 두 고 각각 포신, 바퀴, 포탄 을 세 곳 에 두 고 있 으 며, 각 부분의 무게 가 다 르 기 때문에 수송 속도 도 다르다.단장 은 누가 이 태 리 포 를 가장 빨리 조립 해서 내 앞 에 운반 할 수 있 는 능력 이 있 습 니까? 아버 지 는 그 에 게 고구마 반 근 을 주 셨 습 니 다. 스님 은 듣 고 기뻐 하 셨 습 니 다. 그런데 그 는 어떻게 해 야 시간 을 가장 빨리 할 수 있 는 지 모 르 겠 습 니 다. 당신 이 그 를 도와 줄 수 있 습 니까? 라 고 말 했다.
부품 을 들 기만 하면 내 려 놓 을 수 없 기 때문에 a 시 에 들 수 없다. b 시 에 내 려 놓 고 다른 부품 을 찾 으 러 가자.기본 스님 은 1 초 에 한 단위 의 거 리 를 걷 고 상하 좌우 네 방향 으로 만 갈 수 있 습 니 다. 만약 에 스님 이 지금 포신 을 들 고 있다 고 가정 하면 그 는 한 단위 의 거 리 를 걸 을 때마다 (t1 + 1) 초 가 필요 합 니 다. 만약 에 바퀴 를 들 면 그 는 지금 한 걸음 걸 을 때마다 (t1 + t2 + 1) 초 의 시간 이 필요 합 니 다. 이런 식 으로 유추 합 니 다.점 은 반복 해서 지나 갈 수 있 고 부품 이 있 는 점 을 지나 갈 때 가 져 가 거나 안 가 져 가 는 것 을 선택 할 수 있 습 니 다.
입력 설명:
         n, m      ,(1<=n, m <= 100);   n    m  ‘#’ ‘.’     ,’#’   ,’.’   ,     ,          (     ),                  。      ,      10   sx,sy,x1, y1, x2, y2, x3, y3, ex, ed(   100)     ,      ,     ,     ,     ,      (  ),        。        t1, t2, t3,(     1,  100),      ,  ,              。        。

출력 설명:
         ,                。      。

문제 풀이:
출발점 과 종점 이 확정 되 고 중간 세 시의 순 서 는 여섯 가지 상황 이 있 으 며 옮 겨 다 니 면 된다.
#include
using namespace std;
int n,m,sx,sy,ex,ey,x1,y11,x2,y2,x3,y3,t1,t2,t3;
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool mp[101][101];
char t[101][101];
struct node
{
    int x,y,step;
};
queueP;
int bfs(int tx,int ty,int rx,int ry,int v)
{
    while(!P.empty())P.pop();
    memset(mp,0,sizeof(mp));
    node r;r.x=tx,r.y=ty,r.step=0;
    P.push(r);mp[r.x][r.y]=1;
    while(!P.empty())
    {
        r=P.front();P.pop();
        if(r.x==rx&&r.y==ry)
            return r.step;
        for(int i=0;i<4;i++)
        {
            int xx=r.x+d[i][0],yy=r.y+d[i][1];
            if(xx<0||xx>=n||yy<0||yy>=m)continue;
            if((t[xx][yy]!='#'||v!=(t1+t2+t3+1))&&!mp[xx][yy])
            {
                mp[xx][yy]=1;
                node e;e.x=xx;e.y=yy;e.step=r.step+v;
                P.push(e);
            }
        }
    }
    return 1e9;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i

좋은 웹페이지 즐겨찾기