当前位置:编程学习 > C/C++ >>

310 - L--system

[cpp]  
描述:题意很简单,不过要是想要通过看题明白确实挺麻烦的,就是给你一个开始字符串w和最终字符串z,字符串中只有a与b,如果遇到a就替换成第一个字符串,遇到b就替换成第二个字符串,问这样的替换方式能否构成一个形如 xzy 的字符串(x,y,可为空);  
#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <map>  
#include <string>  
using namespace std;  
#define MAX 130000  
map<string,int> hash;  
string a,b,w,z,s[MAX];  
int flag,rear=1,front=0;  
void judge(string &p)  
{  
    for(int i=0; i<p.size(); i++)  
    {  
        string str="";  
        for(int j=i; j<i+z.size()&&j<p.size(); j++) str+=p[j];  
        if(str==z)  
        {  
            printf("YES\n");  
            flag=1;  
            return;  
        }  
        if(!hash[str])  
        {  
            hash[str]=1;  
            s[rear++]=str;  
        }  
    }  
}  
void bfs()  
{  
    hash.clear();  
    s[0]=w;  
    hash[w]=rear=1;  
    front=0;  
    if(s[front].size()>=z.size()) judge(s[front]);  
    if(!flag) while(front<rear)  
        {  
            string str="";  
            for(int i=0; i<s[front].size(); i++)  
                if(s[front][i]=='a') str+=a;  
                else str+=b;  
            judge(str);  
            if(flag) return;  
            front++;  
        }  
}  
int main()  
{  
#ifndef ONLINE_JUDGE  
    freopen("a.txt", "r", stdin);  
#endif  
    while(cin>>a>>b>>w>>z)  
    {  
        flag=0;  
        bfs();  
        if(!flag) printf("NO\n");  
    }  
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,