/*vector清空比较麻烦(可能内容清了但内存还在size)
多组数据要重置还是别用比较好 */
/*vector 的 清空
for (int i = 0; i < n; i++)
vec[i].clear();
for (int i = 1; i < n; i++) {
scanf("%d%d", &a, &b);
vec[a].push_back(b);
}
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=30;
string c;
int vis[maxn][maxn],f,g[maxn][maxn];
void dfs(int x){
if(x==12){
f=1;
return;
}
for(int j=0;j<26;j++){
if(!vis[x][j]&&g[x][j]){
vis[x][j]=1;
dfs(j);
if(f) return;//有一条路可以实现,其它的就不用看了。在dfs后所以可以一路return回去
vis[x][j]=0;//回溯.除了油包那题不用回溯 其它暂时都要 。如果这条路不通得找其它的路
}
}
}
int main(){
memset(vis,0,sizeof(vis));
memset(g,0,sizeof(g));
while(getline(cin,c)){
if(c[0]=='0') {
f=0;dfs(1);
if(f) cout<<"Yes."<<endl;
else cout<<"No."<<endl;
memset(vis,0,sizeof(vis));
memset(g,0,sizeof(g));
//memset要放后面否则前面的g白输入了
continue;//别忘了否则会执行后面的 放if最后否则会不执行前面的
}
int a,b;
a=c[0]-'a';
b=c[c.length()-1]-'a';
g[a][b]=1;
}
return 0;
}
07-12
07-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交