summaryrefslogtreecommitdiffstats
path: root/src/metis-test.cpp
blob: c48d8ff1d8853a87c2ad971a3072fd4919757f28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
 * This file is part of MXE. See LICENSE.md for licensing information.
 *
 * taken from: https://gist.github.com/erikzenker/c4dc42c8d5a8c1cd3e5a
 */


#include <cstddef> /* NULL */
#include <metis.h>
#include <iostream>


// Install metis from:
// http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz

// Build with
// g++ metis.cc -lmetis

int main(){

    idx_t nVertices = 6;
    idx_t nEdges    = 7;
    idx_t nWeights  = 1;
    idx_t nParts    = 2;

    idx_t objval;
    idx_t part[nVertices];


    // Indexes of starting points in adjacent array
    idx_t xadj[nVertices+1] = {0,2,5,7,9,12,14};

    // Adjacent vertices in consecutive index order
    idx_t adjncy[2 * nEdges] = {1,3,0,4,2,1,5,0,4,3,1,5,4,2};

    // Weights of vertices
    // if all weights are equal then can be set to NULL
    idx_t vwgt[nVertices * nWeights];


    // int ret = METIS_PartGraphRecursive(&nVertices,& nWeights, xadj, adjncy,
    //                     NULL, NULL, NULL, &nParts, NULL,
    //                     NULL, NULL, &objval, part);

    int ret = METIS_PartGraphKway(&nVertices,& nWeights, xadj, adjncy,
                       NULL, NULL, NULL, &nParts, NULL,
                       NULL, NULL, &objval, part);

    std::cout << ret << std::endl;

    for(unsigned part_i = 0; part_i < nVertices; part_i++){
    std::cout << part_i << " " << part[part_i] << std::endl;
    }


    return 0;
}