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;
}
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;
}
nvGRAPH三角形计数和遍历示例的更多相关文章
- 基于mapreduce实现图的三角形计数
源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景 图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...
- Luogu P2807 三角形计数
题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...
- Java实现三角形计数
题: 解: 这道题考的是穷举的算法. 一开始看到这道题的时候,本能的想到用递归实现.但使用递归的话数据少没问题,数据多了之后会抛栈溢出的异常.我查了一下,原因是使用递归创建了太多的变量, 每个变量创建 ...
- 洛谷 P2807 三角形计数
P2807 三角形计数 题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问 ...
- ContentProvider官方教程(3)ContentResolver查询、遍历 示例
Retrieving Data from the Provider This section describes how to retrieve data from a provider, using ...
- luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两 ...
- 611. Valid Triangle Number三角形计数
[抄题]: 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形? [暴力解法]: 全部都用for循环 时间分析: 空间分析: [思维问题 ...
- 【题解】Luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
原题传送门 我们考虑进行容斥 包含原点的三角形个数=所有可能三角形的个数-不包含原点三角形的个数 对于每个点,我们会发现:将它与原点连线,在直线左边任选两点或右边任选两点与这个点构成的三角形一定是不包 ...
- 3828. 三角形计数 3829. ZCC loves Isaac 3830. 字符消除
3828 给定n个点的坐标(0<=xi,yi<=10000)求选出任意三个点能组成的三角形的总面积. 题解 太naive了 枚举三角形的y最小的点,把剩余的点按角度排序 然后随便算,可以用 ...
随机推荐
- hdu4662 简单搜索打表
题意: 给你一个初始串"MI",这个串有三种操作, (1)M后卖弄可以直接复制 ,MI -> MII (2)三个III可以变成一个U,MUIII -> MUU ...
- Python脚本模拟登陆DVWA
目录 requests模拟登陆 Selenium自动化测试登陆 环境:python3.7 windows requests模拟登陆 我们登陆DVWA的时候,看似只有一步:访问网站,输入用户名和密码,登 ...
- Nmap 扫描器的使用技巧
1.nmap语法 -A 全面扫描/综合扫描 例如:nmap -A 127.0.0.1 扫描指定段 例如:nmap 127.0.0.1-200&nmap 127.0.0.1/24 2.Nmap ...
- WPF之数据绑定基类
数据绑定方法 在使用集合类型作为列表控件的ItemsSource时一般会考虑使用ObservalbeCollection,它实现了INotifyCollectionChanged和INotifyPro ...
- vue的快速入门【IDEA版本】
和vscode相比,使用IDEA进行前端开发并没有那么容易,需要先进行配置 . 安装vue插件,重启idea 鼠标右键添加vue component 点击 file 打开设置 settings,展开 ...
- ERROR Invalid options in vue.config.js: "baseUrl" is not allowed
vue项目 我的这个版本是 3.10.0 module.exports = { baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' ...
- 网络请求axios
axios的定义 axios是一个基于Promise,用于浏览器和node的HTTP客户端 axios的功能特点 在浏览器中发送 XMLHttpRsquests 请求 在node.js中发送http请 ...
- 【Docker】2. Docker的架构介绍、安装与卸载 (CentOS 7)
一.docker的基本组成 开局一张图. docker的组成: Client:客户端,可以通过它与docker服务进行交互.比如容器的构建.拉取.运行. DOCKER_HOST:就是docker服务. ...
- 使用C#操作注册表
这节讲一下使用C#操作注册表. 首先来了解一下,什么是注册表,注册表是Windows中特有的一个东西,百度百科中对其解释如下:Windows注册表(Registry)实质上是一个庞大的数据库,它存储着 ...
- 项目展示$\alpha$
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 强制转会与项目展示 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 ...