hdu 1181 變形課

很不錯的一道搜索題,思路是講每個單詞的首尾單詞找出來,用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;
}

發佈了29 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章