现在的位置: 首页 > 综合 > 正文

hdu 1501 Zipper (DFS)

2013年05月16日 ⁄ 综合 ⁄ 共 603字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<string.h>

const int maxn = 205;
char a[maxn] , b[maxn] , pat[maxn * 2];
int vis[maxn][maxn];
int n , al , bl , patl;

bool dfs(int aa , int bb , int p){
    //printf("aa = %d bb = %d p = %d\n" , aa , bb , p);
    if(p == al + bl) return true;
    if(vis[aa][bb] == 0){
        vis[aa][bb] = 1;

        if(a[aa] == pat[p] && aa < al){
            if(dfs(aa + 1 , bb , p + 1)) return true;
        }
        if(b[bb] == pat[p] && bb < bl){
            if(dfs(aa , bb + 1 , p + 1)) return true;
        }
    }

    return false;
}

int main(){
    scanf("%d" , &n);
    for(int cases = 1 ; cases <= n ; cases ++){
        memset(vis , 0 , sizeof(vis));
        scanf("%s%s%s" , a , b , pat);
        al = strlen(a);
        bl = strlen(b);
        patl = strlen(pat);
        printf("Data set %d: " , cases);
        if(dfs(0 , 0 , 0)) printf("yes\n");
        else printf("no\n");
    }

    return 0;
}

抱歉!评论已关闭.