zoukankan      html  css  js  c++  java
  • P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)

    题目描述
    两只牛逃跑到了森林里。农夫John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。

    追击在10x10的平面网格内进行。一个格子可以是:

    一个障碍物, 两头牛(它们总在一起), 或者 农民John. 两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。

    一个格子可以是:

    . 空地

    • 障碍物

    C 两头牛

    F 农民John

    这里有一个地图的例子:

    …*…

    …*.F…

    …*…

    …C…*

    .

    ..

    牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转90度。 同时,它们不会离开地图。

    农民John深知牛的移动方法,他也这么移动。

    每次(每分钟)农民John和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。

    读入十行表示农夫John,两头牛和所有障碍的位置的地图。每行都只包含10个字符,表示的含义和上面所说的相同,你可以确定地图中只有一个’F’和一个’C’.'F’和’C’一开始不会处于同一个格子中。

    计算农夫John需要多少分钟来抓住他的牛,假设牛和农夫John一开始的行动方向都是正北(即上)。 如果John和牛永远不会相遇,输出0。

    输入输出格式
    输入格式:
    每行10个字符,表示如上文描述的地图。

    输出格式:
    输出一个数字,表示John需要多少时间才能抓住牛们。如果John无法抓住牛,则输出0。

    输入输出样例
    输入样例#1:




    .F…


    …C…

    .
    ..
    输出样例#1:
    49
    说明
    翻译来自NOCOW

    USACO 2.4
    农夫抓两头牛,农夫跟牛的行进方式一样,但是要注意

    牛-------> <------农夫

    这种情况不算相遇。

    #include<bits/stdc++.h>
    using namespace std;
    const int dx[4]={-1,0,1,0};//上、右、下、左四个方向
    const int dy[4]={0,1,0,-1};
    int cx,cy,ct;
    int fx,fy,ft;
    bool f[21][21],v[21][21][4][21][21][4];
    void dfs(int k)
    {
        if(cx==fx && cy==fy)
        {
            printf("%d
    ",k);
            return ;
        }
        if(v[fx][fy][ft][cx][cy][ct]==false)
        {
            printf("0
    ");
            return;
        }
        v[fx][fy][ft][cx][cy][ct]=false;
        if(f[cx+dx[ct]][cy+dy[ct]]==false)
        {
            ct++;if(ct==4) ct=0;
        }
        else cx=cx+dx[ct],cy=cy+dy[ct];
        if(f[fx+dx[ft]][fy+dy[ft]]==false)
        {
            ft++;if(ft==4) ft=0;
        }
        else fx=fx+dx[ft],fy=fy+dy[ft];
        dfs(k+1);
     }
    int main()
    {
        int i,j;char st[21];
        memset(f,false,sizeof(f));
        for(i=1;i<=10;i++)
        {
            scanf("%s",st+1);
            for(j=1;j<=10;j++)
            {
                if(st[j]=='.') f[i][j]=true;
                if(st[j]=='F') fx=i,fy=j,f[i][j]=true;
                if(st[j]=='C') cx=i,cy=j,f[i][j]=true;
            }
        }
        ct=ft=0;
        memset(v,true,sizeof(v));
        dfs(0);
        return 0;
    }
    
  • 相关阅读:
    洛谷P3959 宝藏(状压dp)
    洛谷P3645 [APIO2015]雅加达的摩天楼(最短路+分块)
    洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)
    洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)
    洛谷P4768 [NOI2018]归程(克鲁斯卡尔重构树+最短路)
    hive3.1.1 hive-site.xml
    mysql 远程连接数据库的二种方法
    linux彻底干干净净完全卸载 mysql
    jdk环境变量配置
    Eclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798849.html
Copyright © 2011-2022 走看看