1181:变形课

来源:互联网 发布:sql 别名 后续能否使用 编辑:程序博客网 时间:2024/05/19 14:55

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1181

方法:bfs

思路:题目要求寻找到有这样的咒语即可,所以用bfs就可以。不过本体的bfs比较特殊,并不是很符合套路,但是仍然可以按照模板写出。重点在与flag在什么位置清零,j在每一组数据完成之后一定要清零,另外还要注意mark数组一定要有,如果不标记,那么就会出现堆栈溢出的情况,因为很有可能一个单词开头结尾相同,那么他将无休止的调用自己。

难点:flag和索引清零的位置。

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAX = 1000000;bool flag = 0;int i = 0;bool mark[MAX];struct Word{    char s;    char e;}w[10000];void dfs(Word m){    if(m.e == 'm')    {        flag = 1;        return;    }    for(int j = 0;j < i;j++)    {        if(m.e == w[j].s && mark[j] == 0)        {            mark[j] = 1;            dfs(w[j]);            mark[j] = 0;        }    }}int main(){    string s;    while(cin>>s)    {        if(s == "0")        {            memset(mark,0,sizeof(mark));            for(int j = 0;j < i;j++)            {                if(w[j].s == 'b')                {                    dfs(w[j]);                }            }            if(flag == 1)                cout<<"Yes."<<endl;            else                cout<<"No."<<endl;            flag = 0;            i = 0;        }        else        {            w[i].s = s[0];            w[i].e = s[s.length()-1];            i++;        }    }}


0 0
原创粉丝点击