图算法

两种储存方式优缺点比较

邻接矩阵的优点是可以快速判断两个顶点之间是否存在边,可以快速添加边或者删除边。而其缺点是如果顶点之间的边比较少,会比较浪费空间。因为是一个 

nnn∗n 的矩阵。

而邻接表的优点是节省空间,只存储实际存在的边。其缺点是关注顶点的度时,就可能需要遍历一个链表。还有一个缺点是,对于无向图,如果需要删除一条边,就需要在两个链表上查找并删除。

点击打开链接


两种遍历方式

深度:

点击打开链接

广度:

/**
	 * 图的广度优先遍历。
	 * 借助队列实现,同时设置一个包含结点个数的visited数组表示某个结点是否已经被遍历过。
	 * 初始化时把第一个结点加入到结果list中,并且把visited[0]设置为true。
	 * 循环开始时队列中存储的是图中的第一个结点,循环结束的条件是队列变成空。
	 * 循环体内取出队列的第一个元素,并且把这个元素的所有未被访问过的邻接点都加入到队列中、加入到结果list中、设置其对应的状态为已访问。
	 */
	public static boolean visited[];
	public static ArrayList<Integer> list = new ArrayList<Integer>();
	public static ArrayList<Integer> BFS_Graph(int graph[][]){
		Queue<Integer> queue = new ArrayBlockingQueue<Integer>(10);
		int size = graph.length;
		visited = new boolean[size];
		/*Step1:把初始第一个结点放到栈内。*/
		queue.add(0);
		visited[0] = true;
		list.add(0);
		int i ;
		/*Step2:循环队列中的元素直到队列为空。*/
		while(!queue.isEmpty()){
			i = queue.poll();
			for(int j =0;j<size;j++){//找刚刚被弹出队列的队头元素可达的点
				if(graph[i][j] ==1 && visited[j] == false){
					visited[j] = true;
					list.add(j);
					queue.add(j);
				}
			}
		}
		return list;
	}

最短路径

Dijkstra算法

点击打开链接

点击打开链接(代码)


拓扑排序

点击打开链接

点击打开链接





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值