以鄰接矩陣(數組表示)的方法來建立帶權值的有向圖(有向網)

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

相關文章
相關標籤/搜索