METIS是一个图分割库(graph partitioning
)。
Browse Source
选择源代码文件,Generate
选择VS版本,以及生成项目的文件夹,生成METIS.sln
。metis\GKlib\gk_arch
中删除,#define rint(x) ((idx_t)((x)+0.5))
。(我把metis\programs\metsbin.h
、metis\libmetis\metislib.h
中也删了)。metis.lib
:点击METIS.sln
打开项目,选择relase
,按F7
生成解决方案,metis.lib
在同一目录的"libmetis\Release"
中(以上内容在BUILD-Windows.txt
中)。metis.lib
(第4步生成),以及metis.h
(在下载的metis-5.1.0\include
中),配置方式见参考三。METIS_PartGraphKway()
的使用// 图结构
// 0 --- 1 --- 2
// | | |
// 3 --- 4 --- 5
//
int func(){
using namespace std;
idx_t nVertices = 6; // 节点数
idx_t nEdges = 7; // 边数
idx_t nWeights = 1; //
idx_t nParts = 2; // 子图个数
idx_t objval;
std::vector<idx_t> part(nVertices, 0);
// 每个节点在邻接绝阵中的下标位置
// 0的邻居信息从adjncy[0]开始;1从adjncy[2]的开始...
std::vector<idx_t> xadj = { 0,2,5,7,9,12,14 };
// 每个点邻居的邻接矩阵,是连续存贮的
// 1,3是0的邻居;0,4,2是1的邻居...
std::vector<idx_t> adjncy = { 1,3,0,4,2,1,5,0,4,3,1,5,4,2 };
// 边的权重,如果一样设置成NULL(0)
std::vector<idx_t> vwgt(nVertices * nWeights, 0);
int ret = METIS_PartGraphKway(&nVertices, &nWeights, xadj.data(), adjncy.data(),
NULL, NULL, NULL, &nParts, NULL,
NULL, NULL, &objval, part.data());
std::cout << ret << std::endl;
for (unsigned part_i = 0; part_i < part.size(); part_i++) {
std::cout << part_i << " " << part[part_i] << std::endl;
}
}
section 5.5
)。section 5.8
)。我他妈的真是个废物一篇论文写写写不完。但成功#include
的那一刻,还是有些许自豪。
.lib
:依赖设置,附加依赖项和附加库目录三部分。error C2131
考虑使用c++11的vector