题目链接:HDU 1187 变形课
dfs。
比较简单,刚开始没有用标记数组,栈爆了。
外层用while(true)不行,出现Output Limit Exceeded。
#include <iostream>
#include <cstring>
using namespace std;
char a[100000];
int map[30][30];
int vis[30];
int len;
int flag;
void dfs(int cur)
{
if(cur == 12)
{
flag = true;
return;
}
for(int i = 0;i < 26;i++)
{
if(map[cur][i] && !vis[i])
{
vis[i] = 1;
dfs(i);
}
if(flag)
return;
}
}
int main()
{
while(cin >> a)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
flag = false;
if(a[0] == '0')
{
cout <<"No." << endl;
continue;
}
len = strlen(a);
map[a[0] - 'a'][a[len - 1] - 'a'] = 1;
while(cin >> a,a[0] != '0')
{
len = strlen(a);
map[a[0] - 'a'][a[len - 1] - 'a'] = 1;
int q = a[0] - 'a';
int p = a[len - 1] - 'a';
}
vis[1] = 1;
dfs(1);
if(flag)
cout << "Yes." << endl;
else
cout <<"No." << endl;
}
return 0;
}