• P1032 字串变换


    最近在练习bfs,看到了02年提高组的这个题,顿时来了兴致,联想到前一阵子的八数码问题,具体就是使用一个字符串来存储状态,把他存储到一个图中,然后开始bfs,如果10步之内无法完成就剪枝,同时使用哈希来优化判重。下面贴上代码。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1000;
    string A, B, from[maxn], to[maxn];
    string state[maxn];
    int dist[maxn];
    int n = 3;
    set<int> vis;
    void init_lookup_table() {
    	vis.clear();
    }
    int try_to_insert(string s) {
    	int v = 0;
    	for(int i = 0; i < s.length(); i++) v += s[i] - 65;
    	if(vis.count(v)) return 0;
    	vis.insert(v);
    	return 1;
    }
    int bfs() {
    	init_lookup_table();
    	int front = 1, rear = 2;
    	while(front < rear) {
    		string& s = state[front];
    		if(s == B) return front;
    		for(int i = 0; i < n; i++) {
    			int pos = 0;
    			while(p = s.find(from[i], pos)) {
    				string w;
    				w = s.substr(0, p) + to[i] + s.substr(p+to[i].length(), s.length());
    				dist[rear] = dist[front] + 1;
    				if(try_to_insert(w)) rear++;
    				pos = p;
    			}
    		}
    		front++;
    	}
    }
    int main() {
    	cin >> A >> B;
    	for(int i = 0; i < n; i++) {
    		cin >> from[i] >> to[i];
    	}
    	int ans = bfs();
    	cout << dist[ans];
    }
    
  • 相关阅读:
    感悟.
    近期感悟
    android 新建项目无法自动生成R文件
    重装后各种碰壁
    rhapsody
    libevent
    ui android需要解决的问题
    sql对xml的解析
    将datarow转换为实体的方法
    网页中的一些我不熟的东西
  • 原文地址:https://www.cnblogs.com/gengchen/p/6009968.html
Copyright © 2020-2023  润新知