写一个图的算法(二)

本文介绍了图的算法,包括Kruskal算法求有权图的最小生成树,Dijkstra算法解决单源最短路径问题,以及应对负权边的Bellman-Ford算法。详细解释了算法原理,并提供了测试用例来展示算法的应用。
摘要由CSDN通过智能技术生成

写一个图的算法(二)

有权图的最小生成树Krusk算法

Kruskal算法计算有权无向图的最小生成树

测试用例:

8 16
4 5 .35
4 7 .37
5 7 .28
0 7 .16
1 5 .32
0 4 .38
2 3 .17
1 7 .19
0 2 .26
1 2 .36
1 3 .29
2 7 .34
6 2 .40
3 6 .52
6 0 .58
6 4 .93
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;

public class KruskalMST {
	//有权图
	static List<List<Double[]>> totallist;
	//最小生成树
	static List<Double[]> minTree;
	static int[] rank;
	static int[] parent;
	static double mstWeight;
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int N = scanner.nextInt();
	
### 回答1: 答案: def binary_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 ### 回答2: 算法也被称为折半查找算法,它是一种高效的查找算法。下面是一个用Python编算法: ```python def binary_search(arr, target): low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` 这个算法接受一个已排序的整数数组arr和一个目标值target作为输入,并返回目标值在数组中的索引,如果目标值不存在于数组中,则返回-1。 该算法首先初始化两个指针low和high分别指向数组的最低和最高索引。在每次循环中,它计算中间索引mid,如果中间索引处的值等于目标值,则返回中间索引。如果中间索引处的值小于目标值,则将low指针移动到mid + 1的位置,否则将high指针移动到mid - 1的位置。这样,算法会在数组中不断缩小范围,直到找到目标值或者找不到目标值为止。 这个算法的时间复杂度为O(log n),其中n是数组的大小。由于每次迭代都将搜索空间减半,所以算法的效率非常高。 ### 回答3: 算法,也称为折半查找算法,是一种常用的查找技术。它通过将已排好序的元素集合分成两半并递归地对其进行查找,直到找到目标元素或确定目标元素不存在。 以下是一个使用Python实现的简单算法: ```python def binary_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 测试 arr = [1, 3, 5, 7, 9, 11, 13] target = 7 result = binary_search(arr, target) if result != -1: print("元素在索引位置", result) else: print("元素不存在") ``` 在上面的代码中,binary_search函数接受一个已排好序的数组arr和目标元素target作为参数。它使用了两个变量left和right来追踪查找范围的左右边界。在每次迭代中,算法会将中间索引mid计算为left和right的平均值,并将其与目标元素进行比较。如果arr[mid]等于target,表示目标元素已经找到;如果arr[mid]小于target,则目标元素位于mid右侧,更新left为mid + 1;如果arr[mid]大于target,则目标元素位于mid左侧,更新right为mid - 1。如果迭代结束时仍未找到目标元素,函数返回-1表示目标元素不存在。 在测试部分,我们创建了一个要查找的数组arr和目标元素target,并调用binary_search函数来查找目标元素。如果找到了目标元素,则打印其索引位置;否则打印"元素不存在"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值