zoukankan      html  css  js  c++  java
  • nvGRAPH三角形计数和遍历示例

    nvGRAPH三角形计数和遍历示例

    #include “ stdlib.h”

    #include“ inttypes.h”

    #include“ stdio.h”

     

    #include“ nvgraph.h”

     

    #define check( a )

    {

        nvgraphStatus_t status =(a);

        if((status)!= NVGRAPH_STATUS_SUCCESS){

            printf(“ERROR :%s,%s:%d  n”,status,__ FILE __,__ LINE __); 

            exit(0);

        }

    }

     

    int main(int argc,char ** argv)

    {

        // nvgraph变量

        nvgraphHandle_t handle;

        nvgraphGraphDescr_t graph;

        nvgraphCSRTopology32I_t CSR_input;

     

        //初始化主机数据

        CSR_input =(nvgraphCSRTopology32I_t)malloc(sizeof(struct nvgraphCSRTopology32I_st));

     

        //无向 graph:

          

    // 3个三角形

        //邻接矩阵下三角形的CSR:

        const size_t n = 6,nnz = 8;

        int source_offsets [] = {0,0,1,2,4,4,6,8};

        int destination_indices [] = {0,1,1,2,2,2,3,3,4};

     

        check(nvgraphCreate(&handle));

        check(nvgraphCreateGraphDescr( handle&graph));

        CSR_input-> nvertices = n;

        CSR_input-> nedges = nnz;

        CSR_input-> source_offsets = source_offsets;

        CSR_input-> destination_indices = destination_indices;

        //设置 graph连接性

        check(nvgraphSetGraphStructure(handle,graph,(void *)CSR_input,NVGRAPH_CSR_32));

     

        uint64_t trcount = 0;

        check(nvgraphTriangleCount( handle, graph,&trcount));

        printf(“三角形数:%” PRIu64 “ n”,trcount);

     

        free(CSR_input);

        check(nvgraphDestroyGraphDescr( handle, graph));

        check(nvgraphDestroy( handle));

        return 0;

    }

    nvGRAPH遍历示例

    void check_status(nvgraphStatus_t status){

         if((int)status!= 0){

            printf(“error:%d n”,status);

            exit(0);

        }

    }

    int main(int argc,char ** argv){

         // graph示例(CSR格式)

        const size_t n = 7,nnz = 12,vertex_numsets = 2,edge_numset = 0;

        int source_offsets_h [] = {0,1,3,4,6,6,8,10,12};

        int destination_indices_h [] = {5,0,2,0,4,5,5,2,3,3,4,1,5};

        //存储结果的位置(与源的距离)和存储结果的位置(搜索树中的前身)

        int bfs_distances_h [n],bfs_predecessors_h [n];

        // nvgraph变量

        nvgraphStatus_tstatus;

        nvgraphHandle_t handle;

        nvgraphGraphDescr_t graph;

        nvgraphCSRTopology32I_t CSR_input;

        cudaDataType_t * vertex_dimT;

        size_t distances_index = 0;

        size_t predecessors_index = 1;

        vertex_dimT =(cudaDataType_t *)malloc(vertex_numsets * sizeof(cudaDataType_t));

        vertex_dimT [distances_index] = CUDA_R_32I;

        vertex_dimT [predecessors_index] = CUDA_R_32I;

        //创建nvgraph对象

        check_status(nvgraphCreate(&handle));

        check_status(nvgraphCreateGraphDescr( handle&graph));

        //设置 graph的连通性和属性(转移)

    CSR_input =(nvgraphCSRTopology32I_t)malloc(sizeof(struct nvgraphCSCTopology32I_st));

        CSR_input-> nvertices = n;

        CSR_input-> nedges = nnz;

        CSR_input-> source_offsets = source_offsets_h;

        CSR_input-> destination_indices = destination_indices_h;

        check_status(nvgraphSetGraphStructure(handle,graph,(void *)CSR_input,NVGRAPH_CSR_32));;

        check_status(nvgraphAllocateVertexData( handle, graph,vertex_numsets,vertex_dimT));

        int source_vert = 1;

        //设置遍历参数 

        nvgraphTraversalParameter_t traversal_param;

        nvgraphTraversalParameterInit(&traversal_param);

        nvgraphTraversalSetDistancesIndex(&traversal_param,distances_index);

        nvgraphTraversalSetPredecessorsIndex(&traversal_param,predecessors_index);

        nvgraphTraversalSetUndirectedFlag(&traversal_param,false);

        //使用BFS算法进行遍历

        check_status(nvgraphTraversal( handle, graph,NVGRAPH_TRAVERSAL_BFS,&source_vert,traversal_param));

        //获取结果

        check_status(nvgraphGetVertexData(handle, graph表,(void *)bfs_distances_h,distances_index));

        check_status(nvgraphGetVertexData( handle, graph,(void *)bfs_predecessors_h,predecessors_index));

        //

        for(int i = 0; i <n; i ++),期望bfs distances_h =(1 0 1 3 3 2 2147483647) printf(“距顶点%d的距离:%i n”,i,bfs_distances_h [i]) ; printf(“ n”);

        //

        for(int i = 0; i <n; i ++),期望bfs前驱体=(1 -1 1 5 5 0 -1) printf(“顶点%d的前驱体:%i n”,i,bfs_predecessors_h [i ]); printf(“ n”);

        free(vertex_dimT);

        free(CSR_input);

        check_status(nvgraphDestroyGraphDescr( handle, graph));

        check_status(nvgraphDestroy(handle));

        return 0;

    }

  • 相关阅读:
    区域赛系列一多边形划分(卡特兰数)
    Going Home(最大匹配km算法)
    奔小康赚大钱(km)
    Air Raid(最小路径覆盖)
    Save Princess(丑数)
    Asteroids(最小点覆盖)
    Windows命令行命令总结
    SPI协议详解
    Python实现串口通信(pyserial)
    python中进制转换
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14265655.html
Copyright © 2011-2022 走看看