日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

字串变换(洛谷-P1032)

發(fā)布時間:2025/3/17 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字串变换(洛谷-P1032) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

已知有兩個字串 A, B 及一組字串變換的規(guī)則(至多6個規(guī)則):

A1 -> B1

A2 -> B2

規(guī)則的含義為:在 A$中的子串 A1 可以變換為 B1、A2 可以變換為 B2 …。

例如:A='abcd'B='xyz'

變換規(guī)則為:

‘a(chǎn)bc’->‘xu’‘ud’->‘y’‘y’->‘yz’

則此時,A 可以經(jīng)過一系列的變換變?yōu)?B,其變換的過程為:

‘a(chǎn)bcd’->‘xud’->‘xy’->‘xyz’

共進(jìn)行了三次變換,使得 A 變換為B。

輸入輸出格式

輸入格式:

輸入格式如下:

A B A1 B1 \

A2 B2 |-> 變換規(guī)則

... ... /

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

輸出格式:

輸出至屏幕。格式如下:

若在 10 步(包含 10步)以內(nèi)能將 A 變換為 B ,則輸出最少的變換步數(shù);否則輸出"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())//判斷字符串是否為空{(diào)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; }

?

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。