您的位置:首页 > 移动开发 > IOS开发

hdu 1181 变形课

2013-05-03 16:19 435 查看
很不错的一道搜索题,思路是讲每个单词的首尾单词找出来,用ans[x][y]数组进行标记,表示从x-----y存在,还必须要有b开头的字母,所以要进行判断。并将字母转化为数字处理,看起来更熟悉。

#include<iostream>

#include<cstdio>

#include<cstring>

#include <memory>

using namespace std;

#define max 27

bool ans[max][max];

char a[300];

bool dfs(int x,int y)

{

    if(y==12)  {return true;}

        for(int i=0;i<=26;i++)

        {

            if(ans[y][i])

            {

            ans[y][i]=false;     //标记走过

            if(dfs(y,i))   return true;

            ans[y][i]=true;    //回溯

            }

        }

    return false;

}

int main()

{

    int flag=0;

    memset(ans,false,sizeof(ans));

    while(scanf("%s",a)!=EOF)

    {

        int i;

        if(a[0]=='0')

        {

            if(flag==0) break;

            for( i=0;i<=26;i++)

            {

            if(ans[1][i])

              {

                ans[1][i]=false;

                if(dfs(1,i))

                {

                    printf("Yes.\n");

                    break;

                }

              }

            }

            if(i==27)   printf("No.\n");

             memset(ans,false,sizeof(ans));

            flag=0;

        }

        else

        {

            flag=1;

           int  len=strlen(a);

            int x=a[0]-'a';

            int y=a[len-1]-'a';

            ans[x][y]=true;

        }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息