图的邻接表构建

图的邻接表构建

详细描述(点击)
在这里插入图片描述

public class GraphDemo{
	Map<String,Vertex> vertexMap;//使用HashMap储存顶点
	class Vertex{
		String name;//顶点名称
		Edge next;//下一条边(第一个为顶点 后面都是边)
		public Vertex(String name) {
			this.name = name;
		}
		
	}
	class Edge{
		String name;//指向的顶点名称
		int weight;//权值
		Edge next;//下一条边(链表上)
		public Edge(String name, int weight) {
			this.name = name;
			this.weight = weight;
		}
	}
	public GraphDemo() {
		this.vertexMap = new HashMap<>();//创建对象是建立一个hashmap
	}
	/**
	 * 插入顶点
	 * @param vertexName
	 */
	public void insertVertex(String vertexName) {
		Vertex vertex = new Vertex(vertexName);
		vertexMap.put(vertexName, vertex);
	}
	/**
	 * 插入边
	 * @param begin 开始顶点
	 * @param end 结束顶点
	 * @param weight 权值
	 */
	public void insertEdge(String begin,String end,int weight) {
		Vertex beginVertex = vertexMap.get(begin);
		if(beginVertex==null) {
			beginVertex=new Vertex(begin);
			vertexMap.put(begin, beginVertex);
		}
		Edge edge = new Edge(end, weight);
		if(beginVertex.next==null) {
			beginVertex.next=edge;
		}else {
			Edge lastEdge=beginVertex.next;
			while(lastEdge.next!=null) {
				lastEdge=lastEdge.next;
			}
			lastEdge.next=edge;
		}
	}
	/**
	 * 打印图
	 */
	public void print() {
		Set<Entry<String, Vertex>> set = vertexMap.entrySet();
		Iterator<Entry<String, Vertex>> iterator = set.iterator();
		while(iterator.hasNext()) {
			Entry<String, Vertex> entry = iterator.next();
			Vertex vertex = entry.getValue();
			Edge edge = vertex.next;
			while(edge!=null) {
				System.out.println(vertex.name + " 指向 " + edge.name + " 权值为:" + edge.weight);
				edge = edge.next;
			}
		}
	}
	public static void main(String[] args) {
		GraphDemo graph = new GraphDemo();
		graph.insertVertex("A");
		graph.insertVertex("B");
		graph.insertVertex("C");
		graph.insertVertex("D");
		graph.insertVertex("E");
		graph.insertVertex("F");
		graph.insertEdge("C", "A", 1);
		graph.insertEdge("F", "C", 2);
		graph.insertEdge("A", "B", 4);
		graph.insertEdge("E", "B", 2);
		graph.insertEdge("A", "D", 5);
		graph.insertEdge("D", "F", 4);
		graph.insertEdge("D", "E", 3);
		graph.print();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值