zoukankan      html  css  js  c++  java
  • Kattis

    Kattis - glitchbot 【DFS】

    这里写图片描述

    这里写图片描述

    题意
    有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的。我们需要找出那个指令,并且改成正确的。

    思路
    因为数据范围比较小,我们可以把每条指令都改一下 暴力搜索一下,能不能走到目标点,如果改了,可以 那么 这就是答案 直接输出 break 掉就可以了

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #include <cstdlib>
    #include <ctype.h>
    #include <numeric>
    #include <sstream>
    using namespace std;
    
    typedef long long LL;
    const double PI  = 3.14159265358979323846264338327;
    const double E   = 2.718281828459;  
    const double eps = 1e-6;
    const int MAXN   = 0x3f3f3f3f;
    const int MINN   = 0xc0c0c0c0;
    const int maxn   = 1e5 + 5; 
    const int MOD    = 1e9 + 7;
    int vis[55];
    int n, m, t;
    map <string, int> M;
    int Move[4][2] =
    {
         0, 1, //上  0
         0,-1, //下  1
        -1, 0, //左  2
         1, 0, //右  3
    };
    int dis, ans;
    void change(int cur)
    {
        if (dis == 0)
            dis += vis[cur];
        else if (dis == 1)
        {
            if (vis[cur] == 2)
                dis += 2;
            else
                dis += 1;
        }
        else if (dis == 2)
        {
            if (vis[cur] == 2)
                dis = 1;
            else
                dis = 0;
        }
        else if(dis == 3)
        {
            if (vis[cur] == 2)
                dis = 0;
            else
                dis = 1;
        }
    }
    void dfs(int x, int y, int cur)
    {
        if (x == n && y == m && cur == t)
        {
            ans = 1;
            return;
        }
        else if(cur == t)
            return;
        else
        {
            if (vis[cur] == 1)
                dfs(x + Move[dis][0], y + Move[dis][1], cur + 1);
            else
            {
                change(cur);
                dfs(x, y, cur + 1);
            }
        }
    }
    
    int main()
    {
        M["Forward"] = 1;
        M["Left"] = 2;
        M["Right"] = 3;
        scanf("%d%d%d", &n, &m, &t);
        memset(vis, 0, sizeof(vis));
        int i, j;
        string s;
        for (i = 0; i < t; i++)
        {
            cin >> s;
            vis[i] = M[s];
        }
        for (i = 0; i < t; i++)
        {
            int temp = vis[i];
            int flag = 0;
            for (j = 1; j <= 3; j++)
            {
                vis[i] = j;
                ans = 0;
                dis = 0;
                dfs(0, 0, 0);
                if (ans && j != temp)
                {
                    flag = 1;
                    break;
                }
            }
            if (flag)
            {
                printf("%d ", i + 1);
                if (j == 1)
                    cout << "Forward
    ";
                else if (j == 2)
                    cout << "Left
    ";
                else 
                    cout << "Right
    ";
                break;
            }
            else
                vis[i] = temp;
        }
    }
    
  • 相关阅读:
    如何进行Django单元测试
    django使用celery实现异步操作
    django 多并发,多线程。
    cookies设置时间
    Mysql实现企业级日志管理、备份与恢复
    Redis与Memcached的区别
    cookie 和session 的区别详解
    python内存泄露查找
    浙大月赛ZOJ Monthly, August 2014
    Vector
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433382.html
Copyright © 2011-2022 走看看