package com.tiffanyiong;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
    public static void main(String[] args){
        int n = 5; // 結點個數
        String vertices[] = {"A", "B", "C", "D", "E"};
        // 創建圖對象
        Graph graph = new Graph(n);
        // 循環添加頂點
        for (String vertex : vertices) {
            graph.insertVertex(vertex);
        }
        // 添加邊
        // A-B A-C B-C    B-D B-E
        graph.insertEdge(0, 1, 1);
        graph.insertEdge(0, 2, 1);
        graph.insertEdge(1, 2, 1);
        graph.insertEdge(1, 3, 1);
        graph.insertEdge(1, 4, 1);
        //show metrix
        graph.showGraph();
    }
}
class Graph {
    public ArrayList<String> vertexList; // 存頂點集合
    public int[][] edges; // 存儲對應的鄰結矩陣
    public int numsOfEdges;
    // constructor
    public Graph(int n) { //n 是頂點個數
        edges = new int[n][n]; // 頂點有 n 個,對應的矩陣就是 n*n
        vertexList = new ArrayList<String>(n);
        numsOfEdges = 0; // 初始化為 0; 不寫也是默認為 0
    }
    // 圖中常用的方法
    // 返回節點的個數
    public int getNumOfVertex(){
        return vertexList.size();
    }
    // 顯示圖矩陣
    public void showGraph() {
        for (int[] link : edges) {
            System.out.println(Arrays.toString(link));
        }
    }
    //get number of edges
    public int getNumOfEdges(){
        return numsOfEdges;
    }
    // 返回節點 index 對應的數據 0 -> "A" 1-> "B" 2 -> "c"
    public String getValueByIndex(int i ) {
        return vertexList.get(i);
    }
    // 返回 v1 和 v2 的 weight;
    public int getWeight(int v1, int v2) {
        return edges[v1][v2];
    }
    //add node
    public void insertVertex(String vertex){
        vertexList.add(vertex);
    }
    // add edge
    //v1 表示點的下標即第幾個頂點。"A"- "B" is "A" -> 0 "B" -> 1
    //v2 第二個頂點對應的下標
    public void insertEdge(int v1, int v2, int weight){ //weight 的值,這裡不是一就是 0
        edges[v1][v2] = weight;
        // 無向圖
        edges[v2][v1] = weight;
        numsOfEdges++;
    }
}