本题测试数据看到过的博客都说比较水,我也没多想,直接用了一个麻烦的方法,用stack实现。这是因为我把这个题目跟”哈密顿绕行世界问题“这个题比较了一下,发现两个题非常相似,相比之下本题更为简单,于是用了相同的思路。
可以比较一下:HOJ 2181 哈密顿绕行世界问题
#include<iostream>
#include<stack>
#include<cstring>
#include<string>
#pragma(disable:4996)
using namespace std;
const int N = 26;
int flag, a[N][N], vis[N];
void dfs(stack<int> &S, int k) {
if (S.top() == 'm' - 'a') {
flag = 1;
}
for (int i = 0; i < N; i++)
if (i != k && vis[i] == 0 && a[k][i] == 1) {
S.push(i);
vis[i] = 1;
dfs(S, i);
S.pop();
}
}
int main() {
char cc[30];
stack<int> S;
while (scanf("%s", cc) != EOF) {
if (!strcmp(cc, "0")) break;
flag = 0;
S = stack<int>();
memset(a, 0, sizeof(a));
memset(vis, 0, sizeof(vis));
int xc, yc;
xc = cc[0] - 'a';
yc = cc[strlen(cc) - 1] - 'a';
a[xc][yc] = 1;//使用有向图的邻接矩阵方式进行存储
while (scanf("%s", cc) && strcmp(cc, "0")) {//输入直到0结束本册输入
xc = cc[0] - 'a';
yc = cc[strlen(cc) - 1] - 'a';
a[xc][yc] = 1;
}
S.push(1);
dfs(S, 1);
if (flag == 0)
cout << "No." << endl;
else
cout << "Yes." << endl;
}
return 0;
}
来源:CSDN
作者:qq_44724908
链接:https://blog.csdn.net/qq_44724908/article/details/103981238