在矩阵中搜索一系列总和

时间:2017-03-20 11:55:45

标签: java algorithm matrix multidimensional-array depth-first-search

我仍然在努力改进我的编码技巧,这个问题让我在我的轨道上旋转一点,所以任何帮助都非常感谢。我知道如何很容易地创建随机数组,没问题。然而,找到链条的逻辑对我来说非常困难。我认为正确的方法是某种深度优先搜索算法,但我不完全确定如何在这种情况下实现它,或者这是否是正确的。

我的基本问题是,我应该使用深度优先搜索,如果是,我应该递归吗?有关实施的任何提示或提示也欢迎!

  

创建一个随机创建3x3网格的程序   0 <= n <= 9的正数。程序应该   找到所有可能的数字组合,加起来的区域   网格,或9,使用这些规则(类似于Boggle):

     

一个。数字必须在顺序相邻的单元格中“链接”,其中   “相邻”细胞是水平,垂直和对角的细胞   相邻

     

湾链条不必排成一行。例如,它可以去   水平一次,然后垂直一次,最后是对角线一次

     

℃。至少必须在链中使用“网格宽度-1”单元格(a   3x3网格意味着必须至少使用两个单元格

     

d。链不能重复已使用的网格单元

     

即使用与先前链完全相同的细胞的链是   考虑重复,不应计算

我知道,对于每个元素,当您搜索每个相邻元素时,您必须检查并跟踪它之前是否已被访问过,因此您不会重复数字。

public class GridSolver {
int[][] workingGrid;

public GridSolver(int[][] workingGrid){
    this.workingGrid = workingGrid;
}

public String solve(){
    int length = this.workingGrid.length;
    boolean[][] visited = new boolean[length][length];

    for(int rows=0; rows<length; rows++){
        for(int columns=0; columns<length; columns++){
            if(visited[rows][columns] == false){
                dfs(workingGrid[rows][columns]);
            }
        }
    }
    return null;
}   


public HashSet<ArrayList<Integer>> dfs(int element){
    HashSet<ArrayList<Integer>> chains = new HashSet<>();

    checkLeft();
    checkTopLeft();
    checkTopMiddle();
    checkTopRight();
    checkRight();
    checkBottomRight();
    checkBottomMiddle();
    checkBottomLeft();

    return null;
}}

这是我到目前为止所知道的,它是相当草率的,而不是最好的思考方案,但这就是为什么我在这里我猜:P。

另外,为了解释我在代码中的一些想法,dfs()方法的返回类型为HashSet,因为我知道你不能有重复的链,而且它是一组列表的链。此外,“check”方法没有实现,我只是将它们写下来,因为我知道你需要为每个数字处理这些相邻的每个块。

再一次,非常感谢任何帮助,谢谢你在这里作为一个初学者的幽默!

0 个答案:

没有答案