当前位置: 首页 > 知识库问答 >
问题:

使用深度优先搜索的单词搜索

苏乐
2023-03-14

我在处理一个单词搜索问题。我正确地实现了dfs搜索,但在其他地方有一些琐碎的错误。

[ 
 ['o','a','a','n'],
 ['e','t','a','e'],
 ['i','h','k','r'],
 ['i','f','l','v']
                  ]
public class WordSearchII {
public List<String> findWords(char[][] board, String[] words) {

    List<String> res = new ArrayList<String>();

    // in order to reinitailize the board every time after 
    //I search each word in the board
    char[][] temp = new char[board.length][board[0].length];
    for (int i=0; i<board.length; i++){
            for(int j=0; j<board[i].length; j++){
                temp[i][j]=board[i][j];
            }
        }

    for (String word : words){
        board=temp; //reintialize the board
        for (int i=0; i<board.length; i++){
            for(int j=0; j<board[i].length; j++){
                if (find_word(board, word, i, j, 0))// bfs search
                res.add(word);
            }
        }
    }
    return res;
}

public boolean find_word(char[][] board, String word, int i, int j, int index){

    if (index==word.length()) return true;

    if (i<0 || i>=board.length || j<0 || j>=board[i].length) return false;

    if (board[i][j]!=word.charAt(index)) return false;

    char temp=board[i][j];

    board[i][j] = '*';

    if (find_word(board, word, i-1, j, index++)||
        find_word(board, word, i+1, j, index++)||
        find_word(board, word, i, j-1, index++)||
        find_word(board, word, i, j+1, index++)) return true;

    board[i][j]= temp;

    return false;

}
}

共有1个答案

公孙宸
2023-03-14

这似乎就是问题所在:

if (find_word(board, word, i-1, j, index++)||
    find_word(board, word, i+1, j, index++)||
    find_word(board, word, i, j-1, index++)||
    find_word(board, word, i, j+1, index++)) return true;

每次都要递增索引,但必须将index+1传递给每个子调用。

if (find_word(board, word, i-1, j, index+1)||
    find_word(board, word, i+1, j, index+1)||
    find_word(board, word, i, j-1, index+1)||
    find_word(board, word, i, j+1, index+1)) return true;
 类似资料:
  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 本文向大家介绍深度优先搜索,包括了深度优先搜索的使用技巧和注意事项,需要的朋友参考一下 图遍历是按某种系统顺序访问图的所有顶点的问题。遍历图主要有两种方法。 广度优先搜索 深度优先搜索 深度优先搜索(DFS)算法从顶点v开始,然后遍历到之前未访问过的相邻顶点(例如x),并将其标记为“已访问”,然后继续处理x的相邻顶点,依此类推。 如果在任何一个顶点上遇到所有相邻顶点都被访问过,则它将回溯直到找到具

  • 3. 深度优先搜索 现在我们用堆栈解决一个有意思的问题,定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线

  • 我一直看到深度优先搜索的伪代码,它与我的具体问题之间的关系完全让我感到困惑。我试图确定一个“有向图”是否是强连通的。 如果我有一个包含2个字符串的dict(第一个表示源,第二个表示目的地)和一个表示边缘权重的可选数字: 如何实现DFS的某些元素?我知道我可以从一个顶点“奥斯汀”开始,而“休斯顿”是另一个顶点。但我不明白这些在Python代码中是如何工作的 我只是很难看到这种从伪代码到代码的转换。感

  • 骑士之旅是深度优先搜索的特殊情况,其目的是创建最深的第一棵树,没有任何分支。更一般的深度优先搜索实际上更容易。它的目标是尽可能深的搜索,在图中连接尽可能多的节点,并在必要时创建分支。 甚至可能的是,深度优先搜索将创建多于一个树。当深度优先搜索算法创建一组树时,我们称之为深度优先森林。与广度优先搜索一样,我们的深度优先搜索使用前导链接来构造树。此外,深度优先搜索将在顶点类中使用两个附加的实例变量。新

  • 本文向大家介绍什么是深度优先搜索?相关面试题,主要包含被问及什么是深度优先搜索?时的应答技巧和注意事项,需要的朋友参考一下 如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。深度优先搜索