首页 > 编程语言 >C++文件流结构体序列化,并查集,LRU缓存

C++文件流结构体序列化,并查集,LRU缓存

时间:2023-05-26 17:14:10浏览次数:44  
标签:文件 城市 查集 C++ 相连 isConnected 序列化 节点

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

相关文章

  • open mp c++
    FIND_PACKAGE(OpenMPREQUIRED)if(OPENMP_FOUND)message("OPENMPFOUND")set(CMAKE_C_FLAGS"${CMAKE_C_FLAGS}${OpenMP_C_FLAGS}")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}${OpenMP_CXX_FLAGS}")......
  • c++string的erase方法
    erase函数的原型如下:(1)string&erase(size_tpos=0,size_tn=npos);(2)iteratorerase(iteratorposition);(3)iteratorerase(iteratorfirst,iteratorlast);也就是说有三种用法:(1)erase(pos,n);删除从pos开始的n个字符,比如erase(0,1)就是删除第一......
  • C++几种智能指针之间的比较
    这些智能指针在设计的时候,一个关键的问题就是所有权的控制。如果把指针所指向的对象比作电视机的话,那么指针就是观众。第一个人需要看电视的时候需要打开它,没人看的时候就要保证把电视关掉。对于std::auto_ptr,boost::shared_ptr和scoped_ptr,情况如下:1.std::auto_ptr:auto_ptr这个......
  • C++写得统计线程利用率的小工具
    thread_usage.h#ifndef__THREAD_USAGE__#define__THREAD_USAGE__#include<fstream>#include<string>#include<map>#include<pthread.h>#include<sys/time.h>namespacethread{classCThreadUsage{pu......
  • How to initialize a static const map in c++?
    #include<map>usingnamespacestd;structA{staticmap<int,int>create_map(){map<int,int>m;m[1]=2;m[3]=4;m[5]=6;returnm;}staticconstma......
  • C++ 注释
     程序的注释是解释性语句,您可以在C++代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。C++支持单行注释和多行注释。注释中的所有字符会被C++编译器忽略。C++注释一般有两种:// -一般用于单行注释。/*...*/ -一般用于多行注释。......
  • C++外卖点餐系统[2023-05-26]
    C++外卖点餐系统[2023-05-26]选题九:外卖点餐系统7.基本要求:[1]编写一个外卖点餐系统,实现对客户、店铺、订单及配送人员等信息的管理。[2]客户信息包括:客户姓名、联系方式、地址等;店铺信息包括:其菜品和价格评分等;配送人员信息包括:姓名,联系方式、评分等:订单信息包括:编......
  • c++ condition_variable wait notify_one
    #include<chrono>#include<condition_variable>#include<ctime>#include<curl/curl.h>#include<curl/easy.h>#include<fstream>#include<future>#include<iostream>#include<iomanip>#include<m......
  • C++中extern "C"的使用
    由上一篇博客知识可得,C++中对符号表中符号的生成方式是不一样的,所以我们需要一种兼容方式处理他们上篇博客地址:https://www.cnblogs.com/woodx/p/17434227.html 但是如果我们需要沿用C的代码,需要链接静态库或动态库的时候,是不是会发生冲突呢 因此需要提前声明extern"C" ......
  • c++之数据库插入
    简述大数据采用数据切分批量插入数据库的方法内容数据导入功能,数据量为360W,按照我们通常的比较笨的方法则的遍历数据一条条的往数据库插入;经实验证明这个方法确实可以完成这个工作,但是它的插入数据的速度太慢,尤其当随着数据库的数据增加,速度会越来越慢;首先,我们知道一条条插入数据是......