Java DFS不是';t在二维阵列上工作
所以我有一系列的颜色。颜色由数字表示。我做了一个dfs,目前只检查数字1,它是红色的。我不知道;我不认为我的密码是对的。我有一个get neights,它可以获取节点周围的邻居,并将它们添加到列表中。电路板是INT数组,如果节点已被访问,则访问的是true或false数组。这是我的dfs:Java DFS不是';t在二维阵列上工作,java,arrays,depth-first-search,neighbours,Java,Arrays,Depth First Search,Neighbours,所以我有一系列的颜色。颜色由数字表示。我做了一个dfs,目前只检查数字1,它是红色的。我不知道;我不认为我的密码是对的。我有一个get neights,它可以获取节点周围的邻居,并将它们添加到列表中。电路板是INT数组,如果节点已被访问,则访问的是true或false数组。这是我的dfs: private int dfs(int startRow, int startCol, int[][]boards, boolean[][] visitedd){ int f; int t;
private int dfs(int startRow, int startCol, int[][]boards, boolean[][] visitedd){
int f;
int t;
visitedd[startRow][startCol] = true;
for(; startRow < q; startRow++){
for(; startCol < q; startCol++){
if(boards[startRow][startCol] == 1 && visitedd[startRow][startCol] == false){
g+=1;
f = startRow;
t = startCol;
dfs(f, t, boards, visitedd);
}
}
}
return g;
private int-dfs(int-startRow、int-startCol、int[]]boards、boolean[]]visitedd){
int f;
int t;
visited[startRow][startCol]=真;
对于(;startRow
我不知道如何使用“获取邻居”正确遍历到下一个红色节点。在
DFS
中,您在离开子节点时将其标记为已探索。请从Wikipedia查看此伪代码:
procedure DFS(G,v):
label v as discovered
for all edges from v to w in G.adjacentEdges(v) do
if vertex w is not labeled as discovered then
recursively call DFS(G,w)
请注意,您没有检查访问的父级。您检查子级。初始化的
q
在哪里?还有,为什么它不工作?它实际上在做什么?q是电路板的大小。在这种情况下,电路板是4,但它可以更改。我希望此dfs使用GetNeights来查找下一个红色,并说明它是否继续美国线到另一点。就像有一块板是[1231[1231][1111]它将跟随所有的一个,如果它继续,它将返回并计算它们。但我不知道如何做。对不起,我不确定我是否完全理解我有一个邻居列表,但我不确定如何使用该列表遍历到下一个有效的邻居。好的,这修复了它始终返回true的问题。但它从未移动过列表中的第一行数组。这是因为您没有输入if逻辑,因为您将该值设置为true
不检查父对象是否被访问,检查子对象是否被访问。我该怎么做呢?我有一个GetNeights,它创建了一个邻居列表。但我不确定如何检查列表中的那些邻居。@user2835532获取邻居并遍历它们,检查访问矩阵,查看它们是否被访问,如果未被访问,则递归调用邻居节点上的DFS。好的,因此在我的if语句中,我将调用GetNeights。使用for each循环检查它们是否为正确类型的节点,以及它们是否未被访问,然后调用该邻居上的DFS?