Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从所有节点中搜索最近的特定顶点的k个数_Java - Fatal编程技术网

Java 从所有节点中搜索最近的特定顶点的k个数

Java 从所有节点中搜索最近的特定顶点的k个数,java,Java,我想从所有其他非医院顶点中找到k个最近的医院顶点。现在我的代码我可以在我的样本测试中运行它,它有10条边和一些顶点,工作正常。但是,当我加载一个真实的道路网络时,它需要几个小时以上的时间,并且输出仍然不可用。网络列表是表示文本文件中所有边的邻接列表。医院列表包含所有源顶点。size是数据文件中最大节点的数目。我是否更改了存储数据的方式 public static List< Map<Integer, Integer>> kNearestHospitals(Arra

我想从所有其他非医院顶点中找到k个最近的医院顶点。现在我的代码我可以在我的样本测试中运行它,它有10条边和一些顶点,工作正常。但是,当我加载一个真实的道路网络时,它需要几个小时以上的时间,并且输出仍然不可用。网络列表是表示文本文件中所有边的邻接列表。医院列表包含所有源顶点。size是数据文件中最大节点的数目。我是否更改了存储数据的方式

    public static List< Map<Integer, Integer>> kNearestHospitals(ArrayList<ArrayList<Integer>> networkList, LinkedList<Integer> hospitalList,
            int size, int k){
        long searchStartTime=System.nanoTime();
        List< Map<Integer, Integer>> result = new LinkedList< Map<Integer, Integer>>();
        //searching
        //finding k nearest hospitals for all the nodes
        for (int i = 0; i < networkList.size(); i++) {
            result.add(kNearest_BFS(networkList,hospitalList,size,i,k));
            System.out.println("test");
        }
        long totalTime=System.nanoTime()-searchStartTime;
        System.out.println("C&D :" +totalTime);
        //FileManager.writeOuputC_D(result, hospitalList, size);
        return result;
    }
    public static  Map<Integer, Integer> kNearest_BFS(ArrayList<ArrayList<Integer>> networkList, LinkedList<Integer> hospitalList,
            int size,int node, int k) {
        //initializing and pre-processing
        Queue<Integer> q = new LinkedList<>();
        dist  = new int[size]; 
        visited = new boolean[size];
        //hospitals = new int[size];
        Map<Integer, Integer> hospitalDistance = new HashMap<Integer, Integer>();

        
        for (int i=0; i < size; i++) {
            visited[i]=false;
            dist[i]=Integer.MAX_VALUE;
        }
        //marking current node and marking as visited
        q.add(node);
        visited[node] = true;
        dist[node] =0;
        
        //searching k nearest hospital for specific node
        while(!q.isEmpty()) {
            int x = q.poll();
            for (int i = 0; i < networkList.get(x).size(); i++) {
                if (visited[networkList.get(x).get(i)]==false) {
                    visited[networkList.get(x).get(i)]= true;
                    dist[networkList.get(x).get(i)]= dist[x] + 1; // vertex's distance + 1 
                    q.add(networkList.get(x).get(i)); // Pushing the adjacent unvisited vertices 
                    if(hospitalList.contains(networkList.get(x).get(i))) {
                        //storing nearest hospital node with distance       
                        hospitalDistance.put(networkList.get(x).get(i), dist[networkList.get(x).get(i)]);
                    }
                    //stop when the hash have top k nearest hospital.
                    if(hospitalDistance.size() == k) {
                        return hospitalDistance;
                    }
                }
            }
        }
        return hospitalDistance;
        
    }

}
publicstaticlistkNearestHospitals(ArrayList网络列表、LinkedList医院列表、,
整数大小,整数k){
long searchStartTime=System.nanoTime();
Listresult=newlinkedlist();
//搜寻
//为所有节点查找k个最近的医院
对于(int i=0;i