题目衔接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1091
题目大意:定义两个单词为doublet序列,当两个序列的长度相同,且只有一个字母不相同,给出一个单词库,求两个单词之间可以通过doublet序列转化的路径。
思路:开始想到了宽度优先搜索,以第一个单词为起点,依次访问与它距离为1的节点,递归进行直到找到目标单词,算法的时间复杂度上界是O(n*n),其中n 最大为25143,理论上是不会超时的,也有BFS的算法AC了,但是我的代码中用到了很多容器,主要是为了方便,所以超时了,下面是我的实现代码,同时贴出了一个比较巧妙的算法,该算法为转载他人的代码。
我的代码:
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <cstdio>
#include <queue>
#include <stack>
#include <fstream>
#define maxn 25143+5
using namespace std;
ve