您的位置:首页 > 其它

寒假训练--图的基本知识

2014-02-19 21:28 239 查看
•邻接矩阵:
▫map[i][j] 表示顶点i和顶点j的边关系
–是否有边相连 0, 1表示
–边权值map[i][j] = w;
▫空间复杂度:O(n^2)
▫访问速度快、直观、适合稠密

邻接表——边表

•结构:
•struct node
•{
•   int u,v,w;
•   intnext;
•}g[M];//作为静态内存来使用,速度快
•int head
,t=0;
初始化

•void init()
•{
•   t = 0;
•   memset(head,-1,sizeof(head));
•}
加边

•voidadd(int u, intv, int w)//添加边
•{
•   g[t].u = u;
•   g[t].v = v;
•   g[t].w = w;
•   g[t].next = head[u];
•   head[u] = t;
•   t++;//为下一次做准备
•}
循环遍历

•//使用的时候,找u的邻接点
•//循环查遍
•for(int  i = head[u]; i!= -1; i = g[i].next)
•{
•   int v= g[i].v;
•   //然后处理:
•}
邻接表——链表

•结构:
•structnode
•{
•   int u
•   int v; //边的结束顶点
•   int w; //边的长度
•   node* next; //指向以同一起点的下一条边的指针
•}*head
; //head[u]指向以u为起始点的第一条边
初始化 

•voidinit()
•{
•   memset(head,NULL,sizeof(head));
•}
加边 

•voidadd(int u, intv, int w)//添加边
•{
•   node* p = new node;//node *p =     (node*)malloc(sizeof(node));
•   p->v = v;
•   p->w = w;
•   p->next = head[u];
•   head[u] = p;
•}//传说中的挂链
循环遍历 

•//使用的时候,找u的邻接点
•for(node*p = head[u]; p != NULL; p = p->next)
•{
•   int v= p->v;
•   //在这里作相应的处理
•}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: