HOJ 1181 变形课

本题测试数据看到过的博客都说比较水,我也没多想,直接用了一个麻烦的方法,用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;
}
发布了7 篇原创文章 · 获赞 0 · 访问量 32

猜你喜欢

转载自blog.csdn.net/qq_44724908/article/details/103981238