从二维矩阵生成所有可能的单词 - DP方法

时间:2015-09-22 19:50:08

标签: arrays algorithm data-structures dynamic-programming

我有一个N x N字符矩阵。现在我想生成所有可能的不同长度的单词。我没有任何字典,我想从二维矩阵中生成所有可能的单词。任何细胞的移动都可以在细胞的所有8个方向上 - 左,上,右,下和所有对角线。

我知道使用深度优先搜索它可以很容易编码但是这种方法在探索所有路径时非常慢。我写了一篇基于DP的程序。但是无法生成所有单词。是否可以使用DP生成单词?

public static void main(String[] args)
{
//Testing a dp solution.
int[] dx = {0, -1, -1, -1, 0, 1, 1, 1};
int[] dy = {-1, -1, 0, 1, 1, 1, 0, -1}; 

char[][] board = {{'A', 'B', 'C'}, {'D', 'E', 'F'}, {'I', 'J', 'K'}};

boolean[][][] dp = new boolean[2][board.length][board[0].length];

for(int k = 0; k < 3; k++)
{
    for(int i = 0; i < board.length; i++)
    {
        for(int j = 0; j < board[0].length; j++)
        {
            if(k == 0)
            {
                dp[k][i][j] = true;
                continue;
            }

            for(int p = 0; p < dx.length; p++)
            {
                int x = i + dx[p];
                int y = j + dy[p];

                if(x >= 0 && x < board.length && y >= 0 && y < board[0].length)
                {
                    if(dp[k-1][x][y] == true)
                    {
                        System.out.print(board[x][y] + "" + board[i][j]);
                    }

                    System.out.print("   ");
                }
            }

            System.out.print("   ");
        }
    }
}
}

请让我知道怎么做。

0 个答案:

没有答案