以字母为索引的邻接矩阵。

问题描述 投票:0回答:1

嗨,我正在寻找一种实现邻接矩阵的方法,我可以使用字母作为索引......类似于Hashmap的东西?

我目前使用的是一个简单的二维数组,我已经将字母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个回答
1
投票

试试这段代码也许有帮助。我的想法是,数据存储在2D数组中,但为了访问元素,创建了特殊的方法。

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)
© www.soinside.com 2019 - 2024. All rights reserved.