hdu--1181--变形课

思路:
并查集的题,用dfs做的,深搜首字母
注意数据结构,保存字符串的首尾字母即可,最初保存整个字符串,结果memory limit

#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
struct st{
    char f,e;
}arr[10000];
bool mar[10000]={0};
void dfs(char);
int mark = 0;
int main()
{
    string str;
    while(cin>>str){
        mark = 0;
        memset(arr,0,sizeof(arr));
        memset(mar,0,sizeof(mar));
        if(str == "0")continue;
        else if(str.begin() != str.end()){
            arr[0].f=str[0];
            arr[0].e=str[str.size()-1];
        }
        int ma = 0,i = 0;
        while(cin>>str){
            ++i;
            if(str == "0"){
                ma = 1;break;
            }
            else if(str.begin() != str.end()){
                arr[i].f=str[0];
                arr[i].e=str[str.size()-1];
            }
        }
        dfs('b');
        if(mark)cout<<"Yes.\n";
        else cout<<"No.\n";
        if(ma == 1)continue;
    }
    return 0;
}
void dfs(char ch){
    if( ch== 'm'){
        mark = 1;return ;
    }
    int i=0;
    for(st s:arr){
        if(s.f == ch && mar[i] == 0){
            mar[i] = 1;
            dfs(s.e);
            if(mark)return ;
            mar[i] = 0;
        }
        i++;
    }
}

 

posted @ 2017-02-14 11:08  朤尧  阅读(226)  评论(0编辑  收藏  举报