思路: 并查集的题,用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. "; else cout<<"No. "; 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++; } }