首页 > 其他 > 详细

洛谷 P1518 两只塔姆沃斯牛

时间:2018-08-19 16:48:57      阅读:155      评论:0      收藏:0      [点我收藏+]

P1518 两只塔姆沃斯牛 The Tamworth Two 

 

简单的模拟题,代码量不大。

他们走的路线取决于障碍物,可以把边界也看成障碍物,遇到就转,枚举次,因为100 * 100 * 4,只有4个可能在一个格子里面走,上下左右,按照给定的方式枚举,如果相遇就输出,没有就输出不可相遇。

(1) 边界看成障碍物,都变成 * 号就好了。

(2) 然后定义两个表示方向的数组

int dx[5]={-1,0,1,0};
int dy[5]={0,1,0,-1};

分别代表上右下左(顺时针)

(3) 立两个flag:flag_F表示F现在的方向,flag_C同理。

(4) 找出F和C的初始位置。

(5) 然后开始枚举每一分钟的情况,要看清楚题目里说明了转弯需要花费时间,循环枚举。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int dx[5]={-1,0,1,0};
int dy[5]={0,1,0,-1};
char map[22][22];
int cx,cy,fx,fy,flag_C,flag_F;
int main()
{
    flag_C=flag_F=0;
    for(int i=0;i<=11;i++)    //边界直接定义为障碍 
        map[0][i]=*,map[i][0]=*,map[11][i]=*,map[i][11]=*;
    
    for(int i=1;i<=10;i++)        //输入
        for(int j=1;j<=10;j++)
            cin>>map[i][j];
    
    for(int i=1;i<=10;i++)    //查找 F和 C的位置。 
    {
        for(int j=1;j<=10;j++)
        {
            if(map[i][j]==C)cx=i,cy=j,map[i][j]=.;
            if(map[i][j]==F)fx=i,fy=j,map[i][j]=.;
        }
    }
    for(int i=1;i<=400000;i++)    //循环枚举 
    {
        if(map[cx+dx[flag_C]][cy+dy[flag_C]]!=*)
            cx=cx+dx[flag_C],cy=cy+dy[flag_C];
        else flag_C++,flag_C%=4;
        
        if(map[fx+dx[flag_F]][fy+dy[flag_F]]!=*)
            fx=fx+dx[flag_F],fy=fy+dy[flag_F];
        else flag_F++,flag_F%=4;
        
        if(fx==cx&&fy==cy)
        {
            printf("%d",i);
            return 0;
        }
//        cout<<"F:"<<fx<<" "<<fy<<" and "<<"C:"<<cx<<" "<<cy<<"\n";
    }
    printf("0")
}

 

洛谷 P1518 两只塔姆沃斯牛

原文:https://www.cnblogs.com/rmy020718/p/9501548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!