【NOIP 2002】 字串变换

匿名 (未验证) 提交于 2019-12-03 00:40:02

【题目链接】

https://www.luogu.org/problemnew/show/P1032

【算法】

【代码】

#include<bits/stdc++.h> using namespace std;  int n; string A,B; string s1[30],s2[30]; map<string,bool> mp;  inline bool bfs() {         int i,pos;         queue< pair<string,int> > q;         pair<string,int> cur;         string tmp;         q.push(make_pair(A,0));         while (!q.empty())         {                 cur = q.front();                 q.pop();                 if (cur.second > 10) return false;                 if (cur.first == B)                 {                         printf("%d\n",cur.second);                         return true;                 }                 for (i = 1; i <= n; i++)                     {                         if (cur.first.find(s1[i]) == string :: npos) continue;                         pos = cur.first.find(s1[i]);                         while (true)                         {                                 tmp = cur.first;                                 tmp.replace(pos,s1[i].length(),s2[i]);                                 if (!mp[tmp])                                 {                                         q.push(make_pair(tmp,cur.second+1));                                         mp[tmp] = true;                                 }                                 if (cur.first.find(s1[i],pos+1) == string :: npos) break;                                 pos = cur.first.find(s1[i],pos+1);                         }                 }             }         }  int main()  {                  cin >> A >> B;         n = 1;         while (cin >> s1[n] >> s2[n]) n++;         if (!bfs()) printf("NO ANSWER!\n");                          return 0;      }

原文:https://www.cnblogs.com/evenbao/p/9278746.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!