zoukankan      html  css  js  c++  java
  • 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];
    }
    
  • 相关阅读:
    JS轮播图
    jquery 60秒倒计时
    jQuery 显示加载更多
    jQuery 显示加载更多
    this指针在不同情况下的指代
    web-app1--移动端等比例代码
    无障碍阅读
    javascript+dom 做javascript图片库
    初探html5---Video + DOM(视频播放)
    14个有效提高网站Banner点击率的设计技巧分享
  • 原文地址:https://www.cnblogs.com/gengchen/p/6009968.html
Copyright © 2011-2022 走看看