深搜_简单的深搜(HDU_1181)

选定 'b' 开头的单词,深搜到底,如遇 'm' 结尾,返回。

#include <stdio.h>
#include <string.h>

#define M 1002
char map[M][M];
int flag[M],tot,re_flag;

void dfs(int i)
{
    char endCH = map[i][(int)strlen(map[i]) - 1];
    if(endCH == 'm')
    {
        re_flag = 1;
        return ;
    }
    for(int j=0; j<tot; j++)
    {
        if(!flag[j] && endCH == map[j][0])
        {
            flag[j] = 1;
            dfs(j);
            flag[j] = 0;
        }
    }
}

void run()
{
    memset(flag,0,sizeof(flag));
    re_flag = 0;
    for(int i=0; i<tot; i++)
    {
        if(map[i][0] == 'b')
        {
            flag[i] = 1;
            dfs(i);
            flag[i] = 0;
        }
    }
}

int main(int argc, char* argv[])
{
    #ifdef __MYLOCAL
    freopen("in.txt","r",stdin);
    #endif

    tot = 0;
    while(scanf("%s",map[tot++]) != EOF)
    {
        if(map[tot-1][0] == '0')
        {
            run();
            printf("%s\n",re_flag ? "Yes." : "No.");
            tot = 0;
        }
    }

    return 0;
}

 

posted on 2013-08-16 17:17  lk1993  阅读(296)  评论(0编辑  收藏  举报