您的位置:首页 > 其它

HDU 1181 变形课

2012-04-04 16:50 337 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1181

这个输入太坑了。。。。。。。。

注意是一进队就就标记vis[]。。。。

还有该串挺大的。。。所以数组开大点,不然越界。。。。。

#include <iostream>
#include <cmath>
#include <queue>
using namespace std;

const int INF = 1<<30;

bool vis[11111];
int g[55][55];
char c[11111];

void Bfs()
{
int q1 = 1, q2;
int i;
queue <int> q;
memset(vis, 0, sizeof(vis));
q.push(q1);
vis[q1] = 1;//一进队就标记vis
while (!q.empty())
{
q2 = q.front();
q.pop();

for (i = 0; i < 26; i++)
{
if (!vis[i] && g[q2][i] == 1)
{
if (i == 'm'-'a')
{
puts("Yes.");
return;
}
q.push(i);
vis[i] = 1;
}
}
}
puts("No.");
return;
}

int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int t;
int n;
int i, j;
int l;
//int a, b, c;
memset(g, 0, sizeof(g));
while (~scanf("%s", c))
{
l = strlen(c);
g[c[0]-'a'][c[l-1]-'a'] = 1;
if (c[0] == '0')
{
Bfs();
memset(g, 0, sizeof(g));//清空
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: