c语言中的文件操作中用fprintf将数据写入到文件中,用fscanf将文件读入内存中,而c++中也有ostream和istream作为键盘流输入,屏幕流输出,对于文件也有ofstream/istream来进行相关的操作.
如图:
图中表示将一个结构体的的数据输入到文件中,并从文件中读取数据,并用得到的数据初始化一个新的结构体,并打印输出。
并查集:
并查集本身可以理解为一片森林,但是这个森林起初所有的树都只有一个根节点,它可以用来查找是否各个元素是否在一个集合中,也可以用于集合之间的合并。
它的底层是一个数组,但是每个数组元素可以抽象的想象成一棵棵树,他的规则是根节点的元素值为整棵树中节点总个数的复数,而非根节点中存着它的双亲结点的下表,所以在用的时候可以将集合中的数据映射成数组的下标,之后做集合的运算处理。
上图是一个包含简单功能的并查集,主要有两个成员函数,一个是找到根节点的函数,一个是合并两个集合。现在就用这两个并查集解决一个leetcode的题。
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。
返回矩阵中 省份 的数量。
示例 1:
输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出:2
示例 2:
输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]]
输出:3
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-provinces
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这个题中的每个城市可以理解为并查集中每个孤立的单元,我们实例化一个并查集,将其中的每一个城市放入并查集中,遍历这个矩阵,如果某个位置为1就联合这两个城市,最后遍历统计一下并查集中的根结点个数就是省份数量了。代码如图:
标签:文件,城市,查集,C++,相连,isConnected,序列化,节点 From: https://www.cnblogs.com/qjwxlj/p/17435248.html