图的邻接矩阵实现(c)
参考:算法:c语言实现 一书
图的邻接矩阵实现
#ifndef GRAPH
#define GRAPH /*
图的邻接矩阵实现
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h> struct edge{
int v;
int w;
}; struct graph{
int v;
int e;
int **adj;
}; edge EDGE(int v, int w)
{
edge e;
e.v = v; e.w = w;
return e;
} int** matrixInit(int r, int c, int val)
{
int **t = (int**)malloc(r*sizeof(int*));
for (int i = 0; i < r; ++i)
t[i] = (int*)malloc(c*sizeof(int));
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
t[i][j] = val;
return t;
} graph* graphInit(int v)
{
graph* g = (graph*)malloc(sizeof(graph));
g->v = v;
g->e = 0;
g->adj = matrixInit(v, v, 0);
return g;
} void graphInsert(graph* g, edge e)
{
int v = e.v, w = e.w;
if (g->adj[v][w] == 0) ++g->e;
g->adj[v][w] = 1;
g->adj[w][v] = 1;
} void graphRemove(graph* g, edge e)
{
int v = e.v, w = e.w;
if (g->adj[v][w] == 1) --g->e;
g->adj[v][w] = 0;
g->adj[w][v] = 0;
} int graphEdge(graph* g, edge a[])
{
int e = 0;
for (int v = 0; v < g->v; ++v)
for (int w = 0; w < g->v; ++w)
if (g->adj[v][w] == 1)
a[e++] = EDGE(v, w);
return e;
} graph* graphCopy(graph* g)
{
graph *cg = graphInit(g->v);
cg->v = g->v;
cg->e = g->e;
for (int i = 0; i < g->v; ++i)
for (int j = 0; j < g->v; ++j)
(cg->adj)[i][j] = (g->adj)[i][j];
return cg;
} void graphDestroy(graph* &g)
{
for (int i = 0; i < g->v; ++i)
free((g->adj)[i]);
free(g->adj);
free(g);
} void graphShow(graph* g)
{
printf("%d vertices, %d edges\n", g->v, g->e);
for (int i = 0; i < g->v; ++i){
printf("%2d:", i);
for (int j = 0; j < g->v; ++j)
if ((g->adj)[i][j] == 1) printf("%2d", j);
printf("\n");
}
} #endif
对各个函数的简单测试:
#include"graph.h" int main()
{
printf("\tgraph of matrix test:\n");
srand(time(NULL));
graph* g = graphInit(10);
edge e[5];
for (int i = 0; i < 5; ++i){
e[i].v = rand() % 10;
e[i].w = rand() % 10;
graphInsert(g, e[i]);
}
graphShow(g);
printf("\n"); graph* cg = graphCopy(g);
graphDestroy(g);
graphRemove(cg, e[1]);
graphShow(cg);
printf("\n"); for (int i = 0; i < 5; ++i)
printf("%d: %d\n", e[i].v, e[i].w);
printf("\n"); edge ee[10];
int cnt=graphEdge(cg, ee);
for (int i = 0; i < cnt; ++i)
printf("%d,%d\n", ee[i].v, ee[i].w);
printf("\n"); }
图的邻接矩阵实现(c)的更多相关文章
- 数据结构(12) -- 图的邻接矩阵的DFS和BFS
//////////////////////////////////////////////////////// //图的邻接矩阵的DFS和BFS ////////////////////////// ...
- java 图的邻接矩阵
有向图 在有向图中,结点对<x ,y>是有序的,结点对<x,y>称为从结点x到结点y的一条有向边,因此,<x,y>与<y,x>是两条不同的边.有向图中的 ...
- Java图的邻接矩阵实现
/** * * 图的邻接矩阵实现 * @author John * * @param <T> */ class AMWGraph<T> { private ArrayList& ...
- 图的邻接矩阵存储实现,C++描述
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 稠密图(邻接矩阵),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)
全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...
- _DataStructure_C_Impl:图的邻接矩阵存储
//_DataStructure_C_Impl:邻接矩阵 #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- c_ 数据结构_图_邻接矩阵
程序主要实现了图的深度遍历和广度遍历. #include <stdio.h> #include <stdlib.h> #include <string.h> #de ...
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { pro ...
- 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)
数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...
随机推荐
- Find Minimum in Rotated Sorted Array,Find Minimum in Rotated Sorted ArrayII
一:Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to yo ...
- 更改linux系统提示信息
一个好的习惯会让人终生受益,当然我们做运维也是如此,比如我们在前期维护系统时修改或者删除掉/etc/issue /etc/issue.net这两个文件. 修改和删除的目的是屏蔽系统版本信息,这样是为了 ...
- 在Windows的Wamp环境下安装Composer
注意: PHP缺少openssl扩展. 你可能会去屏幕右下角的Wamp的控制台,去加载php的openssl扩展,或者在php.ini中去掉 extension=php_openssl.dll 这一行 ...
- Oracle EBS-SQL (PO-6):检查订单接收总数.sql
SELECT sum(rcvt.quantity) 接收事务处理汇总数--已排除退货 --rsh.receipt_num 收据号, --pov.vendor_nam ...
- VS2008下WinRar源码生成dll和 lib总结
WinRar官方提供了源码(http://www.rarlab.com/rar_add.htm):如果自己想要修改里面的内容就要重新生成DLL和LIB,我在网上找了很多资料都没有说得很清楚.花一两天的 ...
- javascript预加载和延迟加载
延迟加载javascript,也就是页面加载完成之后再加载javascript,也叫on demand(按需)加载,一般有一下几个方法: What can your tired old page, o ...
- css案例学习之继承关系
代码 <html> <head> <title>继承关系</title> <style> body{ color:blue; /* 颜色 * ...
- C语言入门(21)——使用DBG对C语言进行调试
C语言入门(21)--使用DBG对C语言进行调试 程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪.到目前为止我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码 ...
- Shortest Path(思维,dfs)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- ICSharpCode.SharpZipLib.Zip
//压缩整个目录下载 var projectFolder = Request.Params["folder"] != null ? Request.Params["fol ...