div3--C. Pipes

题目链接:https://codeforces.com/contest/1234/problem/C

题目大意:根据规则,判断是否可以从左上走到右下,1,2,3,4,5,6分别对应题干给的图片,所以1,2是一类,3,4,5,6是一类。

思路:dfs,爆搜,用一个bool变量记录当前水流的 方向, 当遇到第一类时,如果当前是水平方向直接往右。当遇到第二类时,如果当前是竖直方向往右,如果是水平方向,则改变楼层;

AC代码:

#include<bits/stdc++.h>
using namespace std;
int t;
bool flag=false ;
string s1,s2;
void dfs(int x,int y,int a){
    if(flag) return ;
    if(x==2&&y==t){
        flag=1;
        return ;
    }
    if(x==1){
        if((s1[y]=='1'||s1[y]=='2')&&a) dfs(x,y+1,1);
        else if((s1[y]=='3'||s1[y]=='4'||s1[y]=='5'||s1[y]=='6')&&a)  dfs(x+1,y,0);
        else if((s1[y]=='3'||s1[y]=='4'||s1[y]=='5'||s1[y]=='6')&&!a) dfs(x,y+1,1);
    }
    else {
        if((s2[y]=='1'||s2[y]=='2')&&a==1)    dfs(x,y+1,1);
        else if((s2[y]=='3'||s2[y]=='4'||s2[y]=='5'||s2[y]=='6')&&a==1)  dfs(x-1,y,0);
        else if((s2[y]=='3'||s2[y]=='4'||s2[y]=='5'||s2[y]=='6')&&!a==1) dfs(x,y+1,1); 
    }
}
void solve(){
    flag=false ;
    cin>>t;
    cin>>s1>>s2;
    dfs(1,0,1);
    if(flag) cout<<"Yes"<<endl;
    else cout<<"No"<<endl; 
}
int main(){
    int t;
    cin>>t;    
    while(t--) solve();
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Accepting/p/11632808.html