P1032 字串变换

题目描述

已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则),形如:

  • A1​→B1​。
  • A2​→B2​。

规则的含义为:在 A 中的子串 A1​ 可以变换为 B1​,A2​ 可以变换为 B2​ ⋯。

例如:A=abcd,B=xyz,

变换规则为:

  • abc→xu,ud→y,y→yz。

则此时,A 可以经过一系列的变换变为 B,其变换的过程为:

  • abcd→xud→xy→xyz。

共进行了 3 次变换,使得 A 变换为 B。

输入格式

第一行有两个字符串 A,B。

接下来若干行,每行有两个字符串 Ai​,Bi​,表示一条变换规则。

输出格式

若在 10 步(包含 10 步)以内能将 A 变换为 B,则输出最少的变换步数;否则输出 NO ANSWER!

输入输出样例

输入
abcd xyz
abc xu
ud y
y yz
输出
3

一道普通的搜索

for循环枚举每个变换规则,进行变化,判断终点,中途记录步数,如果步数大于10,也视为无解,输出NO ANSWER!如果队列为空了,那依旧是无解,输出NO ANSWER!如果找到了终点,那么就输出步数。

#include<bits/stdc++.h>
#define int long long
using namespace std;
string a,b,A[7],B[7];
map<string,int> mp;
queue<string> q;
int ans=1;
void bfs(){
	q.push(a);
	while(!q.empty()){
		string t=q.front();
		q.pop();
		int mps=mp[t];
		if(mps>10){
			cout<<"NO ANSWER!";//步数大于十是无解
			return;
		}
		if(t==b){
			cout<<mp[t];
			return;
		}
		for(int i=1;i<ans;i++)
			for(int j=0;j<t.length();j++){
				if(t.substr(j,A[i].length())==A[i]){
					string o=t.substr(0,j)+B[i]+t.substr(j+A[i].length());
					if(mp[o]==0){//如果没找过,入队
						mp[o]=mps+1;
						q.push(o);
					}
				}
			}
	}
	cout<<"NO ANSWER!";//没找到也是无解
	return;
}
signed main(){
	cin>>a>>b;
	while(cin>>A[ans]>>B[ans])ans++;
	bfs();
}

相关推荐

  1. P1032 变换

    2024-04-05 07:16:01       32 阅读
  2. 洛谷 P1032 变换

    2024-04-05 07:16:01       54 阅读
  3. 洛谷P1042乒乓球

    2024-04-05 07:16:01       53 阅读
  4. 蓝桥杯经典 年号

    2024-04-05 07:16:01       49 阅读
  5. python节对象Bytes

    2024-04-05 07:16:01       42 阅读
  6. P8827传智杯子

    2024-04-05 07:16:01       53 阅读
  7. P1062 [NOIP2006 普及组] 数列

    2024-04-05 07:16:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 07:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 07:16:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 07:16:01       82 阅读
  4. Python语言-面向对象

    2024-04-05 07:16:01       91 阅读

热门阅读

  1. ubi文件系统挂载

    2024-04-05 07:16:01       41 阅读
  2. centos7 安装 nginx

    2024-04-05 07:16:01       30 阅读
  3. fssh挂载远程服务器目录

    2024-04-05 07:16:01       30 阅读
  4. TensorBoard可视化+Confustion Matrix Drawing

    2024-04-05 07:16:01       33 阅读
  5. 归类一些vim的插件,需要时来看

    2024-04-05 07:16:01       37 阅读
  6. 查看Git用户名/密码/邮箱,及设置git配置

    2024-04-05 07:16:01       36 阅读
  7. 阻抗控制中的effort and flow

    2024-04-05 07:16:01       32 阅读
  8. GoPro相机使用的文件格式和频率

    2024-04-05 07:16:01       36 阅读
  9. RabbitMQ3.x之八_RabbitMQ中数据文件和目录位置

    2024-04-05 07:16:01       34 阅读