【问题标题】:Adjacency Matrix with Letters as Index以字母为索引的邻接矩阵
【发布时间】:2020-09-10 02:21:12
【问题描述】:

您好,我正在寻找一种实现邻接矩阵的方法,我可以在其中使用字母作为索引...类似于哈希图?

我目前使用一个简单的二维数组,并将字母 A-Z 转换为索引 0-25(我可以在之后转换回来,但这似乎是不必要的编码),这样:

matrix[initial][final] = 1;

这给出了:

Index 0    1    2    3
   0  0    1    1    0

   1  1    0    0    0

   2  0    1    0    0

   3  0    1    1    0

我希望能够直接使用 A、B、C、D 而不是 0、1、2、3 来实现。

例如,如果我想添加一个条目:

matrix['A']['B'] = 1

(请注意,这应该在 jdk 8 上运行)

干杯

【问题讨论】:

    标签: java matrix adjacency-matrix digraphs


    【解决方案1】:

    试试这个代码可能会有所帮助。
    想法是将数据存储在二维数组中,但为了访问元素,需要创建特殊方法。

    import java.util.HashMap;
    import java.util.Map;
    
    public class Mat {
    
        int arr[][];
        Map<String,Integer> hm;
        int counter=0;
        public static void main(String[] args)
        {
            Mat m = new Mat();
            //create elements
            m.addElement("a", "b", 2);
            m.addElement("b", "a", 3);
            m.addElement("c", "b", 33);
            //get a particular element
            System.out.println("[c,b]="+m.getElement("c", "b"));
            //iterate through 2Dmatrix
            for(int i=0;i<m.arr.length;i++)
                for(int j=0; j<m.arr[i].length;j++)
                {
                    System.out.println("["+m.getArr(i, j)[0]+","+m.getArr(i, j)[1]+"]="+m.arr[i][j]+" ("+m.getElement(m.getArr(i, j)[0], m.getArr(i, j)[1])+")");
                }
    
        }
        //initialize here what ever letters are used, can be also numbers but in string format
        Mat()
        {
            hm = new HashMap<String,Integer>();;
            hm.put("a",counter++);
            hm.put("b",counter++);
            hm.put("c",counter++);
            arr = new int[hm.size()][hm.size()];
        }
    
        public int getElement(String e1, String e2)
        {
            int i=hm.get(e1);
            int j=hm.get(e2);
            return arr[i][j];
        }
    
        public void addElement(String e1,String e2, int value)
        {
            int i=hm.get(e1);
            int j=hm.get(e2);
            arr[i][j] = value;
        }
    
        public String [] getArr(int i, int j)
        {
            String s[] = new String[2];
            for(String str: hm.keySet())
            {
                if(hm.get(str) == i)
                {
                    s[0] = str;
                };
                if(hm.get(str) == j)
                {
                    s[1] = str;
                };
            }
            return s;
        }
    }
    

    输出:

    [c,b]=33
    
    //same values obtaining with two methods either directly form array
    // or using a special one
    
    [a,a]=0 (0)
    [a,b]=2 (2)
    [a,c]=0 (0)
    [b,a]=3 (3)
    [b,b]=0 (0)
    [b,c]=0 (0)
    [c,a]=0 (0)
    [c,b]=33 (33)
    [c,c]=0 (0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-21
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2023-03-21
      • 2021-12-31
      相关资源
      最近更新 更多