8.4总结

8.2-8.3 把所布置的算法题完成了主要学习了并查集还有二分查找的思想

为首的就是并查集的模板 这个相对来说很简单,就是并查集基本的算法看两个节点是否在同一个集合内,这也是最小生成树算法中最基本的一点

int find(int x)
{
	if (a[x] == x)
	{
		return x;
	}
	else
		a[x] = find(a[x]);
	return a[x];
}

 这个就是并查集中最基本的查找数据,在之后的最小生成树算法中也要多次用到

下一个就是最小生成树了,最小生成树有两种算法分别是kruskal和prim算法我这里用的是kruskal算法

int fa[N]; // 并查集

int find(int x) {
    if (fa[x] != x) {
        fa[x] = find(fa[x]); // 路径压缩
    }
    return fa[x];
}

首先就是要刚刚说过的并查集来判断两个节点是否在总一个集合当中

int kruskal() {
    int sum = 0;
    int edge_count = 0;

    for (int i = 1; i <= n; ++i) {
        fa[i] = i; // 初始化并查集
    }

    sort(edges.begin(), edges.end(), cmp);

    for (auto& e : edges) {
        int u = e.u, v = e.v, w = e.w;
        int root_u = find(u);
        int root_v = find(v);

        if (root_u != root_v) {
            fa[root_u] = root_v; 
            sum += w;
            edge_count++;
            if (edge_count == n - 1) {
                return sum;
            }
        }
    }

    return -1;
}

然后便是kruskal算法的基本逻辑,最后输出主函数进行方法的调用

这个题目的基本逻辑和最小生成树差不多 所以就不多说了

8.4实现了项目中随机选人的基本逻辑 并学习了listview的相关知识

要注意在选人的时候不可以重复选到人,这里用了一个判断逻辑,并且还增加了如果想要选择多少个人在文本框上输入相应的人数即可输出相同数量的数据

int numberOfPersonsToSelect = Math.min(num, people.size());
        List<String> selectedPersons = new ArrayList<>();
        Random random = new Random();

        while (selectedPersons.size() < numberOfPersonsToSelect) {
            int index = random.nextInt(people.size());
            String selectedPerson = people.get(index);

            if (!selectedPersons.contains(selectedPerson)) {
                selectedPersons.add(selectedPerson);
            }
//            System.out.println(selectedPerson);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值