6-6 采用邻接表创建无向图
采用邻接表创建无向图G ,依次输出各顶点的度。
函数接口定义:
void CreateUDG(ALGraph &G);
其中 G
是采用邻接表表示的无向图。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#define MVNum 100
typedef struct ArcNode{int adjvex; struct ArcNode *nextarc; int info;
}ArcNode; typedef struct VNode{ char data; ArcNode *firstarc;
}VNode, AdjList[MVNum]; typedef struct{ VNode vertices[MVNum]; int vexnum, arcnum;
}ALGraph;void CreateUDG(ALGraph &G);int main(){ALGraph G; int i , j,sum=0;CreateUDG(G);ArcNode * p; for(i = 0 ; i < G.vexnum ; ++i){sum=0;p=G.vertices[i].firstarc;for(; p!=NULL; p=p->nextarc){sum+=1;}if(i==0)printf("%d",sum);elseprintf(" %d",sum);}return 0;
}/* 请在这里填写答案 */
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:
2 3 3 3 3
参考答案:
void CreateUDG(ALGraph &G){int n,m;scanf("%d %d",&n,&m);G.vexnum=n;G.arcnum=m;int i,j,k,key,temp;char t1,t2;getchar();for(i=0;i<n;i++){G.vertices[i].firstarc=(ArcNode*)malloc(sizeof(ArcNode));}for(i=0;i<n;i++){scanf("%c",&G.vertices[i].data);G.vertices[i].firstarc=NULL;}getchar();for(i=0;i<m;i++){scanf("%c%c",&t1,&t2);getchar();for(k=0;k<n;k++){if(G.vertices[k].data==t2)key=k;}for(j=0;j<n;j++){if(G.vertices[j].data==t1){temp=j;if(G.vertices[j].firstarc==NULL){ArcNode *q;q=(ArcNode*)malloc(sizeof(ArcNode));q->adjvex=k;G.vertices[j].firstarc=q;G.vertices[j].firstarc->nextarc=NULL;}else{ArcNode *p;ArcNode *q;q=(ArcNode*)malloc(sizeof(ArcNode));q->adjvex=k;p=G.vertices[j].firstarc;while(p->nextarc!=NULL){p=p->nextarc;}p->nextarc=q;q->nextarc=NULL;}}}if(G.vertices[key].firstarc==NULL){ArcNode *q;q=(ArcNode*)malloc(sizeof(ArcNode));q->adjvex=k;G.vertices[key].firstarc=q;G.vertices[key].firstarc->nextarc=NULL;}else {ArcNode *p;ArcNode *q;q=(ArcNode*)malloc(sizeof(ArcNode));q->adjvex=temp;p=G.vertices[key].firstarc;while(p->nextarc!=NULL){p=p->nextarc;}p->nextarc=q;q->nextarc=NULL;}}
}
没有优化,仅供参考。
6-6 采用邻接表创建无向图相关推荐
- 数据结构与算法A实验六图论---7-11 邻接表创建无向图
采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一个字符表 ...
- 利用邻接表创建无向图
#include<iostream> using namespace std; #define MVNum 100 #define OK 1 typedef char VerTexType ...
- 使用邻接表创建无向图和有向图
图的邻接表表示法: 邻接表(Adjacency List) 是图的 一 种链式存储结构.在邻接表中,对图中每个顶点V建立一个单链表,把与 V相邻接的顶点放在这个链表中.邻接表中每个单链表的第一个结点存 ...
- 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径。设计算法,将一个无向图的邻接矩阵转换为邻接表。
采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径.设计算法,将一个无向图的邻接矩阵转换为邻接表. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径. 设计算法,将一个无向图的邻 ...
- 图:图的邻接表创建、深度优先遍历和广度优先遍历代码实现
邻接表介绍 邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构比较较浪费存储空间.如果不想浪费存储空间,大家肯定会先到链表.需要空间的时候再才想内存去申请,同样适用于图 ...
- 算法6.6 采用邻接表表示图的深度优先搜索遍历
算法6.6 采用邻接表表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接表存储表示 # ...
- 图2——利用邻接表创建有向图
图2--利用邻接表创建有向图 图 假设以邻接表作为图的存储结构,编写算法,创建有向图并输出邻接表. 主要考查对邻接表的理解.图的邻接表分为两个部分:表头结点和边表结点,因此创建有向图也分成两部分:一是 ...
- 基于广度优先遍历算法求采用邻接表存储的无向连通图G中从顶点u到v的最短路径
问题 假设图G采用邻接表存储,设计一个算法,求不带权无向连通图G中从顶点u->v的最短路径(路径上经过的顶点数最少.采用广度优先遍历来实现. 基本思路 我们首先来看一下BFS的过程: 图片摘自慕 ...
- 邻接表-建立无向图、无向网、有向图、有向网
#include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 #define OK 1 #define ERR ...
最新文章
- OAF_EO系列2 - Validation数据校验验证机制(概念)
- 通过命令行使用 JAX-WS调用webservice
- linux cat EOF使用示例
- TortoiseSVN Unable to connect to a repository at URL XXX
- iOS内存管理(ARC,MRC)
- WPF中一个通用的BoolToXXX转换类
- linux说明是集群,集群——菜鸟学习Linux集群之概念篇
- [Luogu P2801]教主的魔法
- 编译原理 - SLR(1)
- linux驱动之poll/select轮询机制实例分析(结合驱动中断使用)
- 一文掌握字符串之正则表达式,值得收藏!
- gradle优化之 总体配置优化
- 输入输出流,看似复杂却更好用----小话c++(2)
- c语言通用数据结构和常用算法库,基于C语言的通用数据结构和算法库
- Java根据当前日期获取年初,年末,季初,季末,月初,月末日期的方法
- 条码打印软件中多列不干胶标签纸的设置方法
- 中序线索二叉树的创建、线索化和遍历
- Android 曝光采集,商品view曝光量的统计,判断RecyclerView中某子view是否可见 view是否显示在屏幕中 view展示次数统计...
- install java linux_Install Java7 on Ubuntu Linux
- 线束测试仪—汽车线束检测应用
热门文章
- buff系统 游戏中_原神buff状态有哪些 buff状态系统解析
- 拒绝安利:安利的真相 丁黎
- java tar.gz 格式多文件打包压缩与解压
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667L
- python中 s是什么意思_这里面的s.name是什么意思啊?
- Java类加载与初始化机制实例分析
- 小冰的忍者团队,她在日本开启了怎样一种商业模式?
- [河内塔]汉诺塔实现
- 导出多个sheet的Excel以及在服务器上压缩文件然后再导出(在这里是压缩一个excel后导出)
- Python-List