P1032 字串變換(bfs)
題目描述
已知有兩個字串 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 BA1 B1 \
A2 B2 |-> 變換規則
... ... /
所有字串長度的上限為 20。
輸出格式:輸出至螢幕。格式如下:
若在 10 步(包含 10步)以內能將 A 變換為 B ,則輸出最少的變換步數;否則輸出"NO ANSWER!"
輸入輸出樣例
abcd xyz
abc xu
ud y
y yz
輸出
abc xu
ud y
y yz
輸出
3
又學一招string....#include<bits/stdc++.h>
using namespace std;
string a,b;
string c[10],d[10];
struct nomd
{
string s;
int step;
};
int main()
{
cin>>a>>b;
int n=1;
while(cin>>c[n]>>d[n])
{
n++;
}
n--;
nomd e;e.s=a;e.step=0;
queue<nomd>que;
que.push(e);
map<string,int> w;
while(que.size())
{
nomd t=que.front();
que.pop();
if(t.step>10)
{
printf("NO ANSWER!");
return 0;
}
else if(t.s==b&&t.step<=10)
{
printf("%d\n",t.step);
return 0;
}
if(w[t.s]==0)
{
w[t.s]=1;
for(int i=1;i<=n;i++)
{
if(t.s.find(c[i])>=0)
{
for(int j=t.s.find(c[i]);j>=0&&j<=t.s.size()-c[i].size();j=t.s.find(c[i],j+1))
{
nomd z=t;
z.step+=1;
z.s=z.s.replace(j,c[i].size(),d[i]);
que.push(z);
}
}
}
}
}
return 0;
}
相關文章
- P1032 字串變換字串
- NOIP 2002 字串變換字串
- 字串轉換字串
- OpenGL模型檢視變換、投影變換、視口變換模型
- JavaScript 字串換行JavaScript字串
- sed 字串替換字串
- ACM 字串替換ACM字串
- Octave 數字轉字元,連線兩個字串,以及如何將字串轉換為變數名稱字元字串變數
- MySQL字串函式 字串大小寫轉換MySql字串函式
- 字串-大小寫轉換字串
- react HTML字串轉換ReactHTML字串
- mysql 日期轉換字串MySql字串
- vi替換字串(zz)字串
- POJ 3981 字串替換字串
- list與字串轉換字串
- 調換任意字串位置字串
- 將字串轉換成Bitmap型別 或者 將Bitmap轉換成字串字串型別
- Count BFS Graph
- 01BFS
- oracle行列轉換-多行轉換成字串Oracle字串
- Hough變換
- 傅立葉變換
- 字串大小寫轉換和字串的比較字串
- 第七章——字串(字串字面量轉換)字串
- 仿射變換及其變換矩陣的理解矩陣
- 小波變換與傅立葉變換的區別
- 【DWT筆記】傅立葉變換與小波變換筆記
- OpenGL中的座標變換、矩陣變換矩陣
- echart 設定 柱狀圖 漸變色 線性虛線 lab字串換行字串
- 《Cracking the Coding Interview程式設計師面試金典》----字串變換(字典樹)View程式設計師面試字串
- JavaScript字串轉換數字JavaScript字串
- js中字串的替換JS字串
- Problem 4:替換空格(字串)字串
- js中字串全部替換JS字串
- Linux vi替換字串Linux字串
- 字串轉換整數(atoi)字串
- 字串 列表 字典 互相轉換字串
- JavaScript字串大小寫轉換JavaScript字串