1.數據結構java
private String[] vertex; //頂點集合 private int[][] matrix; //邊或弧,鄰接矩陣
2.附上代碼數據結構
package com.test.frame.fighting.graph; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; /** * MatrixDN class * * @author guanhuifang * @date 2018/1/19 下午11:14 **/ public class MatrixDN { private String[] vertexs; //頂點集合 private int[][] matrixs; //邊或弧,鄰接矩陣 /* * 建立圖(本身輸入數據) */ public MatrixDN() { // 輸入"頂點數"和"邊數" System.out.printf("input vertex number: "); int vlen = readInt(); System.out.printf("input edge number: "); int elen = readInt(); if ( vlen < 1 || elen < 1 || (elen > (vlen*(vlen - 1)))) { System.out.printf("input error: invalid parameters!\n"); return ; } // 初始化"頂點" vertexs = new String[vlen]; for (int i = 0; i < vertexs.length; i++) { System.out.printf("vertex(%d): ", i); vertexs[i] = String.valueOf(readChar()); } // 初始化"邊" matrixs=new int[vlen][vlen]; for (int i = 0; i < elen; i++) { // 讀取邊的起始頂點和結束頂點 System.out.printf("edge(%d):", i); String c1 = String.valueOf(readChar()); String c2 = String.valueOf(readChar()); int p1 = getPostion(c1); int p2 = getPostion(c2); int weight = readInt(); if (p1==-1 || p2==-1) { System.out.printf("input error: invalid edge!\n"); return ; } matrixs[p1][p2] = weight; } } public MatrixDN(String[] vertex, ArrayList<String> matrix) { int verLen = vertex.length; int edgeLen = matrix.size(); //初始化頂點 vertexs = new String[verLen]; for (int i = 0; i < verLen; i++) { vertexs[i] = vertex[i]; } //初始化邊或弧 matrixs = new int[verLen][verLen]; for (int i = 0; i < verLen; i++) { String v1 = matrix.get(i).substring(0, 1); String v2 = matrix.get(i).substring(1, 2); int p1 = getPostion(v1); int p2 = getPostion(v2); int weight = Integer.parseInt(matrix.get(i).substring(2)); matrixs[p1][p2] = weight; } } public int getPostion(String v) { for (int i = 0; i < vertexs.length; i++) { if (vertexs[i].equals(v)) { return i; } } return -1; } /* * 讀取一個輸入字符 */ private char readChar() { char ch='0'; do { try { ch = (char)System.in.read(); } catch (IOException e) { e.printStackTrace(); } } while(!((ch>='a'&&ch<='z') || (ch>='A'&&ch<='Z'))); return ch; } /* * 讀取一個輸入字符 */ private int readInt() { Scanner scanner = new Scanner(System.in); return scanner.nextInt(); } public void print() { System.out.println("MatrixDN:\n"); for(int i=0;i<matrixs.length;i++){ for(int j=0;j<matrixs[i].length;j++){ System.out.println("頂點"+vertexs[i]+"->頂點"+vertexs[j]+" weight:"+matrixs[i][j]); } } } /* * 打印矩陣隊列圖 */ public void print1() { System.out.printf("Martix Graph:\n"); for (int i = 0; i < matrixs.length; i++) { for (int j = 0; j < matrixs.length; j++){ System.out.printf("%d ", matrixs[i][j]);} System.out.printf("\n"); } } public static void main(String[] args) { String[] vertexs = {"A","B","C","D"}; ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("AB4"); arrayList.add("BC5"); arrayList.add("CD7"); arrayList.add("BD7"); arrayList.add("DB7"); arrayList.add("DA7"); // MatrixDN dn = new MatrixDN(vertexs,arrayList); MatrixDN dn = new MatrixDN(); dn.print(); dn.print1(); } }
3.運行結果:ui