宽度优先搜索 UVA 10150 Doublets

博客介绍了UVA 10150 Doublets问题,该问题要求找出单词库中通过只改变一个字母就能互相转换的单词对。博主提出使用宽度优先搜索(BFS)从起始单词开始,逐层查找,直到找到目标单词。虽然理论上BFS算法的时间复杂度允许,但博主的实现由于使用过多容器导致超时。文中还分享了一段高效的AC代码作为参考。
摘要由CSDN通过智能技术生成

题目衔接: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值