吉林大学ACM代码库:图论、数据结构与网络流算法详解

需积分: 0 2 下载量 166 浏览量 更新于2024-07-31 收藏 652KB PDF 举报
"MyLib(For ACM)" 是一个针对计算机科学竞赛(如ACM/ICPC)的学习资源库,主要聚焦在图论、数据结构和网络流这三个核心领域。它由吉林大学计算机科学与技术学院2005级学生在2007-2008年间创建和维护,由ACMGroup1团队编撰,记录了丰富的算法和数据结构解决方案。 图论部分涵盖了深度优先搜索(DFS)的标记方法,用于寻找无向图中的桥梁和计算连通性,包括最大团问题的动态规划(DP)与DFS方法,以及多种最短路径算法,如Dijkstra算法的不同实现(时间复杂度分别为O(N^2)和O(E*LOGE))、Bellman-Ford算法、SPFA算法以及第K短路问题的A*算法。此外,还包括Prim算法求最小生成树、次小生成树、最小生成森林问题、有向图的最小树形图、最小Steiner树、TARJAN算法处理强连通分量,以及判断弦图的相关性质,如完美消除点排列和稳定婚姻问题的解决方案。 网络流部分重点讲解了二分图匹配的各种算法,如匈牙利算法的DFS和BFS实现、HOPcroft-Carp算法、Kuhn-Munkres算法等,同时涵盖无向图最小割、有界流问题、Dinic最大流、HLPP最大流、最小费用流的计算,以及割集(边割集、点割集)和路径覆盖、点集覆盖等经典问题。 数据结构部分则涉及实用的编程技巧,如计算某天是星期几的基础操作,以及对邻接矩阵的使用,如无向图和有向图的连通分支检测(DFS/BFS),以及求解有向图的最小点基问题(同样O(N^2)复杂度)和Floyd-Warshall算法求解最小环。 这些代码库和算法示例不仅有助于提升参赛者的编程技巧,还能深入理解图论和网络流理论在实际问题中的应用,对于准备ACM/ICPC竞赛的学生和爱好者来说,是一个宝贵的资源。通过这些代码实例,学习者可以加深对算法的理解,并熟练掌握如何在实际场景中高效地运用这些数据结构和算法。

同一目录下cmakelist.txt文件为cmake_minimum_required(VERSION 3.16) # 声明该项目的名称和版本号 project(MyLib VERSION 1.0) # 添加库代码文件到该库 add_library(mylib STATIC src/header.cpp) add_library(mylib_shared SHARED src/header.cpp) include_directories(include) # set(PUBLIC_HEADER) # 指定install路径,以便于其他项目找到该库 install(TARGETS mylib mylib_shared EXPORT MyLibConfig ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin INCLUDES DESTINATION include) install(FILES include/header.h DESTINATION include) # 生成MyLibConfig.cmake文件 include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" VERSION ${MyLib_VERSION} COMPATIBILITY AnyNewerVersion ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/MyLibConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" INSTALL_DESTINATION cmake ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" DESTINATION cmake ),而MyLibConfig.cmake.in文件中的代码为# 指定该项目的名称和版本号 set(MyLib_VERSION @MyLib_VERSION@) set(MyLib_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") set(MyLib_LIBRARIES "@CMAKE_INSTALL_PREFIX@/lib/libmylib.a") set(MyLib_LIBRARIES_SHARED "@CMAKE_INSTALL_PREFIX@/lib/libmylib_shared.so") # 导入MyLib的目标 include("${CMAKE_CURRENT_LIST_DIR}/MyLibTargets.cmake"),而MyLibTargets.cmake文件中的代码为# 导入mylib静态库 add_library(MyLib::mylib STATIC IMPORTED) set_target_properties(MyLib::mylib PROPERTIES IMPORTED_LOCATION "@CMAKE_INSTALL_PREFIX@/lib/libmylib.a" ) # 导入mylib_shared动态库 add_library(MyLib::mylib_shared SHARED IMPORTED) set_target_properties(MyLib::mylib_shared PROPERTIES IMPORTED_LOCATION "@CMAKE_INSTALL_PREFIX@/lib/libmylib_shared.so" ) # 导出MyLib的目标 install( EXPORT MyLibConfig NAMESPACE MyLib:: DESTINATION cmake ),以上代码哪里存在错误,为什么不能正确导出MyLibConfig.cmake文件

2023-05-28 上传

cmakelist.txt中代码为cmake_minimum_required(VERSION 3.16) # 声明该项目的名称和版本号 project(MyLib VERSION 1.0) # 添加库代码文件到该库 add_library(mylib STATIC src/header.cpp) add_library(mylib_shared SHARED src/header.cpp) include_directories(include) # set(PUBLIC_HEADER) # 指定install路径,以便于其他项目找到该库 install(TARGETS mylib mylib_shared EXPORT MyLibConfig ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin INCLUDES DESTINATION include) install(FILES include/header.h DESTINATION include) # 生成MyLibConfig.cmake文件 include(CMakePackageConfigHelpers) write_basic_packMyLibConfigage_version_file( "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" VERSION ${MyLib_VERSION} COMPATIBILITY AnyNewerVersion ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/MyLibConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" INSTALL_DESTINATION cmake ) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" DESTINATION cmake ),同级目录下的MyLibConfig.cmake.in代码为# 指定该项目的名称和版本号 set(MyLib_VERSION @MyLib_VERSION@) set(MyLib_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") set(MyLib_LIBRARIES "@CMAKE_INSTALL_PREFIX@/lib/libmylib.a") set(MyLib_LIBRARIES_SHARED "@CMAKE_INSTALL_PREFIX@/lib/libmylib_shared.so") # 导入MyLib的目标 include("${CMAKE_CURRENT_LIST_DIR}/MyLibTargets.cmake"),同级目录下的MyLibTargets.cmake代码为# 导入mylib静态库 add_library(MyLib::mylib STATIC IMPORTED) set_target_properties(MyLib::mylib PROPERTIES IMPORTED_LOCATION "@CMAKE_INSTALL_PREFIX@/lib/libmylib.a" ) # 导入mylib_shared动态库 add_library(MyLib::mylib_shared SHARED IMPORTED) set_target_properties(MyLib::mylib_shared PROPERTIES IMPORTED_LOCATION "@CMAKE_INSTALL_PREFIX@/lib/libmylib_shared.so" ) # 导出MyLib的目标 install( EXPORT MyLibConfig NAMESPACE MyLib:: DESTINATION cmake ),使用以上代码执行make install命令安装相应的cmake包,但是为什么在其他cmake文件中使用find_package()时,无法找到对应的包文件

2023-05-28 上传