zoukankan      html  css  js  c++  java
  • CodeForces

    http://codeforces.com/problemset/problem/586/D

    题意:有一个3*n(n<100)的隧道。一个人在最左边,要走到最右边,每次他先向右移动一格,再上下移动一格。隧道里有车,每次人移动以后,车会向右移动两格,人与车轮流运动。

    题解,将每次车的移动变成人往右移动两格,然后就能搜索了。dfs,用vis数组判掉已经移动到的格子(因为已经移动到的格子要么是不能走到底的,要么就可以走完)。注意他只能移动到三的倍数的格子,所以读入map后要再后面加两列'.'

    #define  _CRT_SECURE_NO_WARNINGS
    #include<cstdio>  
    #include<algorithm>  
    #include<iostream>
    #include<string>
    #include <vector>
    #include<string.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 100 + 5;
    //int d[maxn], k[maxn];
    string map[4];
    int vis[4][maxn];
    //1e4
    int n, x;
    int ok;
    
    void  dfs(int dx, int dy) {
        if (vis[dx][dy]) return;
        vis[dx][dy] = 1;
        for (int i = -1; i <= 1; i++) {
            int ddx = dx + i;
            if (dy >= n - 1) {
                ok = 1;
                return;
            }
            if (map[dx][dy + 1] != '.')return;
            if (map[dx][dy + 2] == '.'&&map[dx][dy + 3] == '.')dfs(dx, dy + 3); if (ok)return;
            if (dx - 1 > 0 && map[dx - 1][dy + 1] == '.'&&map[dx - 1][dy + 2] == '.'&&map[dx - 1][dy + 3] == '.') dfs(dx - 1, dy + 3); if (ok)return;
            if (dx + 1 <4 && map[dx+ 1][dy + 1] == '.'&&map[dx+ 1][dy + 2] == '.'&&map[dx+ 1][dy + 3] == '.') dfs(dx+ 1, dy + 3); if (ok)return;
            
        }
    }
    int main() {
        int t;
        cin >> t;
        while (t--) {
            memset(vis, 0, sizeof(vis));
            cin >> n >> x;
            int s = 0;
            for (int i = 1; i <= 3; i++)
            {
                cin >> map[i]; if (map[i][0] == 's')s = i;
            }
            ok = 0;
    
            if (n % 3 != 1)for (int i = 1; i <= 3; i++) { if ((n % 3) == 0)map[i] = map[i] + '.'; if ((n % 3) == 2)map[i] = map[i] + ".."; }
            dfs(s, 0);
            if (ok == 1)cout << "YES" << endl;
            else cout << "NO" << endl;
        }
        //cin >> t;
    }
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    PAT之我要通过
    卡拉兹(Callatz)猜想
    数组元素循环右移问题
    Reorder List
    一个fork的面试题
    内存流和null字节
    标准C IO函数和 内核IO函数 效率(时间)比较
    由fdopen和fopen想到的
    VS经常报错的link error 2019
    VS快捷键设置
  • 原文地址:https://www.cnblogs.com/SuuT/p/8608057.html
Copyright © 2011-2022 走看看