程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将二维数组转换为具有节点和边的图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将二维数组转换为具有节点和边的图?

开发过程中遇到将二维数组转换为具有节点和边的图的问题如何解决?下面主要结合日常开发的经验,给出你关于将二维数组转换为具有节点和边的图的解决方法建议,希望对你解决将二维数组转换为具有节点和边的图有所启发或帮助;

我的问题是,对于我的 pacman 板创建,我使用的是 1d 数组,但我想对幽灵实施 BFS 算法,据我所知,除非我有一个包含节点和边的图,否则我无法执行该算法。 .. 所以在我的代码中,我试图将一个新创建的二维数组转换为一个哈希映射,并使用一个迭代器作为键(节点),该节点包含“值”,它是板上的特定索引。我希望我走在正确的轨道上,但正在为此苦苦挣扎。

package pacman;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.stream.Collectors;

import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.DefaultUndirectedGraph;
import org.jgrapht.graph.SimpleWeightedGraph;

/**
 * This class is used to create a graph from a 2d array
 * 
 * @author Kody Berry
 *
 */
public class GraphCreation {
    private final static short levelData[] = { 19,18,22,17,16,24,20,25,28,19,21,26,28 };

    public static Graph<Integer,DefaultEdge> undirectedGraph = new DefaultUndirectedGraph<Integer,DefaultEdge>(
            DefaultEdge.class);

    public static Graph<Integer,DefaultEdge> createGraph(int[][] s) {
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        int k = 1;
        // GetTing an iterator
        Iterator<?> mAPIterator = map.entrySet().iterator();

        // Adding values to hash map
        for (int i = 0; i < s.length; i++) {
            for (int j = 0; j < s[i].length; j++) {
                if (s[i][j] == 16) {
                    map.put(k,s[i][j]);
                    k++;
                }
            }
        }

        while (mAPIterator.hasNext()) {
            Map.Entry mapElement = (Map.Entry)mAPIterator.next();
            int t = (int) mapElement.getKey();
            
            undirectedGraph.addVertex(t);
            
        }
        
        return undirectedGraph;
    }

    /**
     * Method used to convert the 1d array game board to a 2d array board
     * 
     * @param s
     * @return
     */
    public static int[][] oneDtoTwoDConverter(short[] s) {

        int array2d[][] = new int[15][15];


        for(int i=0; i<15;i++)
           for(int j=0;j<15;j++)
               array2d[i][j] = s[(j*15) + i]; 

        return array2d;// Returns new 2d array.
    }
    
    // Test output
    public static voID main(String[] args) {
        int[][] s = oneDtoTwoDConverter(levelData);
        System.out.println(createGraph(s));
    }
}

我目前的输出如下。

([],[])

我也在使用 JGraphT 库。我还没有弄清楚如何创建边缘,因此如果您对此有任何建议,我将不胜感激。

附注。如果您对如何执行此操作有更好的想法,请告诉我!谢谢:)

解决方法

可能还有更多问题,但对我来说最明显的是,您在填充地图之前创建了迭代器。当你迭代它时,它会给你填充之前的内容,所以它是空的。

如果您将 audiofile = flask.request.files['file'] filename = werkzeug.utils.secure_filename(audiofile.fileName) audiofile.save('Audio/' + fileName) 移到循环下方,则应该会发生更多情况。

但是这个对“s[i][j] == 16”的检查对我来说也有点可疑,但这我还没有虑得足够多,但不知何故我希望你的地图看起来像{1:16,2: 16,3: 16,...} 用python术语来写。

大佬总结

以上是大佬教程为你收集整理的将二维数组转换为具有节点和边的图全部内容,希望文章能够帮你解决将二维数组转换为具有节点和边的图所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。