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;
}
相關文章
- NOIP 2002 字串變換字串
- JavaScript 字串換行JavaScript字串
- bfs
- Octave 數字轉字元,連線兩個字串,以及如何將字串轉換為變數名稱字元字串變數
- 字串-大小寫轉換字串
- Linux vi替換字串Linux字串
- 調換任意字串位置字串
- list與字串轉換字串
- 字串大小寫轉換和字串的比較字串
- BFS(模板)
- echart 設定 柱狀圖 漸變色 線性虛線 lab字串換行字串
- Problem 4:替換空格(字串)字串
- js中字串全部替換JS字串
- JavaScript字串大小寫轉換JavaScript字串
- JavaScript字串轉換數字JavaScript字串
- 字串轉換整數(atoi)字串
- 字串 列表 字典 互相轉換字串
- js中字串的替換JS字串
- z 變換
- Hough變換
- 仿射變換及其變換矩陣的理解矩陣
- poj 3278 BFS
- 01BFS
- Count BFS Graph
- Java之StringBuffer可變字串(值可以改變)Java字串
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- json字串 轉換為陣列JSON字串陣列
- json字串與物件互相轉換JSON字串物件
- grep sed 大批次替換字串字串
- JavaScript 字串轉換為陣列JavaScript字串陣列
- InputStream流轉換成String字串字串
- JSON字串與HashMap相互轉換JSON字串HashMap
- js替換字串裡的空格JS字串
- Java 浮點到字串轉換Java字串
- 將字串轉換成大寫 2020.12.28字串
- Z變換(2020.10.21)
- 頻域變換
- 小波變換與傅立葉變換的區別