圖的創建+鄰接矩陣(Java實現)

照着這個視頻中老師講解的代碼打的
(鏈接)

package com.algorithms.graph;

import java.util.ArrayList;
import java.util.Arrays;

public class Graph {
	private ArrayList<String> vertexList;//存儲頂點集合
	private int[][] edges;//存儲圖對應的鄰接矩陣
	private int numOfEdges;//表示邊的數目

	public static void main(String[] args) {
		//測試圖是否創建正確
		int n = 5;//結點的個數
		String VertexValue[] = {"A","B","C","D","E"};
		//創建圖對象
		Graph graph = new Graph(n);
		//循環的添加頂點
		for(String value : VertexValue) {
			graph.inserVertex(value);
		}
		//添加邊
		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);
		
		//顯示一把鄰接矩陣
		graph.showGraph();
	}

	//構造器
	public Graph(int n) {
		//初始化矩陣和vertexList
		edges = new int[n][n];
		vertexList = new ArrayList<String>(n);
		numOfEdges = 0;
	}
	//圖中常用的方法
	//返回結點的個數
	public int getNumOfVertex() {
		return vertexList.size();
	}
	//顯示圖對應的矩陣
	public void showGraph() {
		for(int[] link : edges) {
			System.out.println(Arrays.toString(link));
		}
	}
	//得到邊的數目
	public int getNumOfEdges() {
		return numOfEdges;
	}
	//返回結點i(下標)對應的數據
	public String getValueByIndex(int i) {
		return vertexList.get(i);
	}
	//返回v1和v2的權值
	public int getWeight(int v1, int v2) {
		return edges[v1][v2];
	}
	//插入結點
	public void inserVertex(String vertex) {
		vertexList.add(vertex);
	}
	//添加邊
	/**
	 * 
	 * @param v1 表示點的下標即是第幾個頂點
	 * @param v2 第二個頂點對應的下標
	 * @param weight 邊的權值
	 */
	public void insertEdge(int v1, int v2, int weight) {
		edges[v1][v2] = weight;
		edges[v2][v1] = weight;
		numOfEdges++;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章