日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字串变换(洛谷-P1032)

發布時間:2025/3/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字串变换(洛谷-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’

共進行了三次變換,使得 A 變換為B。

輸入輸出格式

輸入格式:

輸入格式如下:

A B A1 B1 \

A2 B2 |-> 變換規則

... ... /

所有字符串長度的上限為 20。

輸出格式:

輸出至屏幕。格式如下:

若在 10 步(包含 10步)以內能將 A 變換為 B ,則輸出最少的變換步數;否則輸出"NO ANSWER!"

輸入輸出樣例

輸入樣例#1:

abcd xyz
abc xu
ud y
y yz

輸出樣例#1:

3

源代碼

#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<string> #define INF 999999999 #define N 1000001 using namespace std; struct node {string str;int step; }q[N]; string used[N]; string a,b; string rulea[20],ruleb[20]; int head,tail=-1; int n,len; string change(string s,int i,int j) {if(i+rulea[j].length()>s.length())return "";for(int k=0;k<rulea[j].length();k++){if(s[i+k]!=rulea[j][k])return "";}string sum=s.substr(0,i);//沒變的部分sum.append(ruleb[j]+s.substr(i+rulea[j].length()));//相加return sum; } int check(string x) {for(int i=1;i<=len;i++){if(x[0]==used[i][0])//比較第一個字符{if(x[1]==used[i][1])//比較第二個字符{if(x==used[i])return 1;//比較整個字符串}elsecontinue;}else continue;}return 0; } void bfs() {q[head].step=0;q[head].str=a;//隊列初始化while(tail<head){node temp=q[++tail];//取隊頭if(check(temp.str)==1)//判重continue;if(temp.step>10){cout<<"NO ANSWER!"<<endl;exit(0);//終止程序}if(temp.str==b){cout<<temp.step<<endl;exit(0);//終止程序}used[++len]=temp.str;//記錄for(int i=0;i<temp.str.length();i++)//枚舉每一位{for(int j=0;j<n;j++)//枚舉變化方式{string sum=change(temp.str,i,j);if(!sum.empty())//判斷字符串是否為空{head++;q[head].str=sum;q[head].step=temp.step+1;//入隊}}}} } int main() {cin>>a>>b;while(cin>>rulea[n]>>ruleb[n])n++;bfs();cout<<"NO ANSWER!"<<endl;return 0; }

?

總結

以上是生活随笔為你收集整理的字串变换(洛谷-P1032)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。