因为有图片,不贴题面了,直接甩个cf链接
https://codeforces.com/problemset/problem/1234/C

记(fx,fy)为上一步位于哪一次节点,(x,y)是现在在的节点。
判断所有情况的下一步是否可走以及往哪走就行了。
又是改了一个小时真的是醉了

#include<bits/stdc++.h>
using namespace std;
int a[11][2000010];
int flag;
int q,n;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>q;
    while(q--)
    {
        cin>>n;

        char ch;
        for(int i=1;i<=n;++i) {cin>>ch;a[1][i]=ch^48;}
        //cin>>ch;
        for(int i=1;i<=n;++i) {cin>>ch;a[2][i]=ch^48;}
        //cin>>ch;
        a[1][n+1]=a[2][n+1]=0;//初始化 
        a[1][0]=2;
        //dfs(1,1,1,0);
        int x=1,y=1,fx=1,fy=0;
        flag=0;
        while(y<=n)
        {
            //cout<<x<<' '<<y<<endl;
            if(a[x][y]<3)
            {
                fx=x;fy=y;++y;
                //dfs(x,y+1,x,y);
            }
            else
            {
                if(fy!=y)
                {
                    if(fx==1) {fx=x;fy=y;x=2;if(a[x][y]==1 || a[x][y]==2) break;}//dfs(2,y,x,y);
                    else {fx=x;fy=y;x=1;if(a[x][y]==1 || a[x][y]==2) break;}//dfs(1,y,x,y);
                }
                else
                {
                    if(a[x][y]>2) {fx=x;fy=y;++y;}//dfs(x,y+1,x,y);
                    else break;
                }
            }
        }
        if(y>n)
        {
            if(x==2) flag=1;
        }
        if(flag)cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}