java - 给定图上无向图 BFS 的 “Adjacency Matrix” 表示并输出顶点

标签 java matrix breadth-first-search

我可以在二维数组数组中找到BFS和DFS值,但是得分没有增加。我无法确切地弄清楚我做错了哪一部分。当我打印应该的值时,排序是正确的。但成绩仍然是 0。我愿意接受你的想法。

public class BFS_DFS {
    public static int[] BFS (int [][] graph) {
        int[] output = {0};
            int start=0;

            int v=graph.length;//a[][] is adj matrix declared globally
            boolean visited[]=new boolean[v];//indexing done from 1 to n
            LinkedList<Integer> queue=new LinkedList<Integer>();
            visited[start]=true;
            queue.add(start);
            while(queue.size()!=0)
            {
                int x=queue.remove();
                System.out.print(x+" ");
                for(int j=graph.length;j<graph.length;j++){
                    output[j-1]=x;
                }

                for (int i=1; i < v; i++)
                    if((graph[x][i] == 1) && (!visited[i]))
                    {
                        queue.add(i);
                        visited[i]=true;   
                    }
            }
      return  output ; 
   }

   public static void main(String[] args) {

        //DO NOT WRITE ANY CODE IN MAIN METHOD
        int [][] graph={{0,1,1,1,0,0},{1,0,0,0,1,1},{1,0,0,0,0,1},{1,0,0,0,0,0},{0,1,0,0,0,0},{0,1,1,0,0,0}};

        int [] BFSresult={0,1,2,3,4,5};
        int [] DFSresult={0,1,4,5,2,3};
        int grade=0;

        if (Arrays.equals(BFS(graph),BFSresult )) {
            System.out.println("BFS is working correctl");
            grade+=50;
        }
        else
            System.out.println("BFS is not working correctly");

        if (Arrays.equals(DFS(graph),DFSresult )) {
            System.out.println("DFS is working correctl");
            grade+=50;
        }
        else
            System.out.println("DFS is not working correctly");

        System.out.println("Your grade is->"+grade);   
    }
}

最佳答案

数组(int[]输出)不适合存储未知长度的结果,因为它具有固定长度。
使用像List这样的集合来代替:

public static int[] BFS (int [][] graph) {

    //you do not know what is the path length so use a List
    List<Integer> output = new ArrayList<>();
    int start=0;

    int v=graph.length;
    boolean visited[]=new boolean[v];//indexing done from 1 to n
    LinkedList<Integer> queue=new LinkedList<>();
    visited[start]=true;
    queue.add(start);
    while(queue.size()!=0)
    {
        int x=queue.remove();
        System.out.print(x+" ");
        output.add(x); //add to output 

        for (int i=1; i < v; i++) {
            if((graph[x][i] == 1) && (!visited[i]))
            {
                queue.add(i);
                visited[i]=true;
            }
        }
    }
    //convert back to array
    return output.stream().mapToInt(Integer::intValue).toArray();

    /*if you can't use java 8 stream, convert output to array using: 
      int[] ret = new int[output.size()];
      int i = 0;
      for (int e : output) { ret[i++] = e; }
      return ret;
    */
}

关于java - 给定图上无向图 BFS 的 “Adjacency Matrix” 表示并输出顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843436/

相关文章:

java - 在应用程序启动 Java swing 之前等待光标

java - Hibernate 可以使用 MySQL 的 "ON DUPLICATE KEY UPDATE"语法吗?

java - 计算矩阵行列式

arrays - 我需要向我创建的二维数组添加一个值

scala - 如何使用 FP 在 Scala 中实现广度优先搜索

c++ - 我如何递归搜索项目的列表列表,获得 "closest"匹配项

java - 将枚举集合映射到单个 varchar 列

javadoc -Xdoclint 一直标记我的(可选)匿名类,因为它显然没有评论

c++ - vector 的 vector 来创建矩阵

algorithm - 如何遍历图中的一个循环?