我遇到了一个使用Python解决Leetcode79字搜索的问题。
给定一个m×n的字符板网格和一个字符串字,如果该网格中存在字,则返回true。
该字可以由顺序相邻单元格的字母构成,其中相邻单元格水平或垂直相邻。同一个字母单元格不能使用不止一次。
我试图使用一个字符队列和一个BFS来查看是否有一个单词存在于黑板上,但解决方案似乎对某些单词有效,而不是其他单词。例如,在第一个testcase中,访问的顺序似乎是[[0,0],[0,1],[0,2],[1,2],[0,3]]而不是预期的[[0,0],[0,1],[0,2],[1,2],[2,2],[2,1]]。我不确定我是否忽略了一些错误(除了从一个起点进行测试之外,我希望在修复这个问题后修复它)。
class Solution(object):
def exist(self, board, word):
"""
:type board: List[List[str]]
:type word: str
:rtype: bool
"""
rows,cols=len(board),len(board[0])
directions=[[1,0],[-1,0],[0,1],[0,-1]]
word=str(word)
mq=list(word)
visited=[]
startlist=[]
#find all start points
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j]==mq[0]:
if [i,j] not in startlist:
startlist.append([i,j])
def bfs(r,c):
q=collections.deque()
q.append([r,c])
visited.append([r,c])
if board[r][c]==mq[0]:
mq.pop(0)
while q:
x,y=q.popleft()
for dx,dy in directions:
row,col=x+dx,y+dy
if row in range(rows):
if col in range(cols):
if mq:
if board[row][col]==mq[0]:
if [row,col] not in visited:
mq.pop(0)
visited.append([row,col])
q.append([row,col])
x,y=startlist[0]
bfs(x,y)
if not mq:
return True
else:
return False
````
您正在尝试的算法有几个问题:
visited
应该只收集当前路径上的节点。其他路径限制当前路径的自由是不对的。mq.pop(0)
将永远删除该字符,但是当您在不同的方向上循环时,所有这些迭代都应该与相同的mq
字符进行比较...所以这是不对的。相反,您应该跟踪mq
中的索引以便与之进行比较。这可以与队列中的行和列一起存储(作为第三个信息)。BFS
仅在startlist
中的第一个单元格启动。startlist
中的所有其他元素都可以有很好的开始位置,但从未尝试过。使用DFS而不是BFS将更容易实现(并且使用更少的内存)。
我正在研究BFS算法,我有一个关于如何将相邻节点插入队列的问题。 例如,假设我们正在处理一个无向图,我们希望执行BFS来输出图的内容,那么我们如何知道在从队列中取出一个初始节点后,相邻节点以什么顺序插入到队列中呢?还有,有没有办法修改邻居节点插入队列的方式? 任何帮助都将不胜感激,谢谢。
有一个最多有10,000个节点的图,每个节点最多可以有4个相邻节点。图是无权无向的。任务是寻找从节点A到节点B的最短路径,路径长度是路径中访问的节点数。BFS算法能在不到一秒钟的时间内找到路径并使用少于64MB的内存吗? 最初的问题是网格(最多100*100)和可以访问的地方,开始的地方,结束的地方,和不能访问的地方。我的第一个猜测是将其简化为使用BFS搜索在未加权图中寻找最短路径。但是,我不确定
本篇将会结合实例解析宽度优先搜索(BFS)。 一、BFS概念 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到
查看BFS和DFS算法,它们似乎将节点标记为已访问。如果我只在树中导航,我的实现是否仍然需要将节点标记为已访问?我想对每个节点执行一次操作。 它似乎只适用于存在循环的图形,这样我就有可能两次碰到同一个节点。如果我递归地对一棵树进行调用,那么似乎不需要具有已访问状态,因为在堆栈中的所有调用返回到当前节点之后,我可以选择在节点上执行我想要的操作。我的假设正确吗? 谢谢
1.添加了关键词不显示怎么回事? 检查添加的关键词用英文状态下的逗号“,”’隔开
我在我的应用程序中使用Hibernate搜索。其中一个子集合映射为IndexeDemBedded。子对象有两个字段,一个是id,另一个是date(使用date resoultion到毫秒)。当我搜索ID=1(或某个值)并且date等于另一个值时,我会得到第一个和第二个匹配的所有情况的结果。我只想在同一个孩子中获得两个字段匹配的记录,但我在不同的孩子中获得匹配,结果会高得多。下面是代码片段 主类是用