深度优先搜索的java实现

标签 java arrays data-structures depth-first-search

下面的代码没有错误,但是我得到的输出不正确

import java.io.*;
class dfs
{
static void dfs(int a[][], int m[], int i, int n)
{
int j;
System.out.println("\t" + (i+1));
m[i] = 1;
for(j=0; j<n; j++)
    if(a[i][j]==1 && m[j]==0)
        dfs(a,m,j,n);
}  
public static void main(String args[]) throws IOException
{
int  n, i, j;
System.out.println("No. of vertices : ");
BufferedReader br= new BufferedReader (new InputStreamReader(System.in));
n =Integer.parseInt(br.readLine());
int m[]= new int[n];
int a[][] = new int[n][n];
for (i=0; i<n; i++)
{
    m[i] = 0;
}
System.out.println("\n\nEnter 1 if edge is present, 0 if not");
for (i=0; i<n; i++)
{
    System.out.println("\n");
    for (j=i; j<n; j++)
    {
        System.out.println("Edge between " + (i+1) + " and " +  (j+1)+ " : ");
        a[i][j] =Integer.parseInt(br.readLine());
        a[j][i]=a[i][j];
    }
    a[i][i] = 0;
}
System.out.println("\nOrder of accessed nodes : \n");
for (i=0; i<n; i++)
    if (m[i]==0)
        dfs(a,m,i,n);


}
} 

输出示例

No of vertices : 8
edges
1 2
1 3
2 4
2 5
3 6
3 7
4 8
5 8
6 8
7 8

DFS 路径应该是:1 2 4 8 5 3 6 7

我得到的输出是:1 2 4 8 5 6 3 7

注意第 6 项和第 7 项是互换的

谁能告诉我如何改正这个。谢谢你的帮助

最佳答案

我更改了你的 dfs 的实现,现在它应该可以工作了,如果你使用变量的名称,使它们更易于识别,你可以更快地获得帮助

static void dfs(int adjacencyMatrix[][], int vertex, int[] visited) {

        System.out.println("visiting " + (vertex + 1) );


        for (int j = vertex + 1; j < adjacencyMatrix[vertex].length; j++)
            if (adjacencyMatrix[vertex][j] == 1 && visited[j] == 0) {
                visited[j] = 1;
                dfs(adjacencyMatrix, j, visited);
            }
    }

关于深度优先搜索的java实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896251/

相关文章:

java - Java中的getView和Beacon(Estimote)问题

CUDA - 如何返回未知大小的结果

javascript - 数组和本地存储

java - 将值从 JavaScript 发送到 JSP(使用 jQuery)

java - 我可以使用正则表达式匹配特定字符的每三次出现吗?

android - 将 URL 数据插入 JSONArray

java - 存储子网以将 IP 地址与子网匹配的最佳数据结构

c++ - 计算白色条纹

python - List vs Dictionary vs Set用于查找数字出现的次数

java - Jena:以编程方式构建查询时的属性路径