zoukankan      html  css  js  c++  java
  • 【洛谷P3411】字串变换

    题解:普通的 BFS 没什么可说的,字符串处理是这道题的难点,同时需要注意哈希判重。
    另外,对于 (string) 类来说,学到了一个 push_back((char)) 操作。
    c++string类详解

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    
    int n;
    string from[6],to[6],st,ed;
    map<string,bool> mp;
    struct node{string s;int cnt;};
    
    void read_and_parse(){
    	cin>>st>>ed;
    	while(cin>>from[n]>>to[n])n++;
    }
    
    string work(const string& s,int idx,int t){ 
    	if(idx+from[t].size()>s.size())return "";
    	for(int i=0;i<from[t].size();i++)if(from[t][i]!=s[i+idx])return "";
    	string now="";
    	for(int i=0;i<idx;i++)now.push_back(s[i]);
    	now+=to[t];
    	for(int i=idx+from[t].size();i<s.size();i++)now.push_back(s[i]);
    	return now;
    }
    
    void solve(){
    	queue<node> q;
    	q.push(node{st,0});
    	while(q.size()){
    		node u=q.front();q.pop();
    		if(mp.find(u.s)!=mp.end())continue;
    		if(u.cnt>10){puts("NO ANSWER!");return;}
    		if(u.s==ed){printf("%d
    ",u.cnt);return;}
    		mp[u.s]=1;
    		for(int i=0;i<u.s.size();i++)
    			for(int j=0;j<n;j++){
    				string now=work(u.s,i,j);
    				if(now=="")continue;
    				q.push(node{now,u.cnt+1});
    			}
    	}
    	puts("NO ANSWER!");
    }
    
    int main(){
    	read_and_parse();
    	solve();
    	return 0;
    }
    
  • 相关阅读:
    poj 2251
    poj 1321
    poj 2777
    poj 3468
    poj 2318
    javascript
    buhui
    swift 构造器
    mac上不了网
    字体
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/10046957.html
Copyright © 2011-2022 走看看