文章目录:
1.图相关功能的实现(代码层面)
2.无向图、有向图、无向网等的邻接矩阵特点与邻接链表特点
一、图的相关功能实现
Create Graph(&G,V,VR)
初始条件:V->表示顶点集合;VR->表示弧线/边的集合
结果:按照V和VR来构造出图G
int LocateVex(ALGraph G,VertexType u)
{ /* 初始条件: 图G存在,u和G中顶点有相同特征*/
/* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */
int i;
for(i=0;i<G.vexnum;++i)
if(strcmp(u,G.vertices【i】.data)==0)
return i;
return -1;
}
int createUdg(algraph &g) {
scanf("%d %d", &g.vernum, &g.arcnum);
for (int i = 0; i < g.vernum; i++) {
scanf("%c", &g.vertices【i】.data);
g.vertices【i】.fistarc = NULL;
}
//无向图的建立,若有向图,删除arc2弧边
for (int i = 0; i < g.arcnum; i++) {
char verx1, verx2;
int posi1, posi2;
scanf("%c %c", &verx1, &verx2); //输入两个顶点
posi1 = locatevex(g, verx1);
posi2 = locatevex(g, verx2);
arcNode * arc1 = new arcNode; //新建一个边结点
arc1->adjvex = posi2;
arc1->nextarc = g.vertices【posi1】.fistarc;
g.vertices【posi1】.fistarc = arc1;
arcNode * arc2 = new arcNode; //新建一个边结点
arc2->adjvex = posi2;
arc2->nextarc = g.vertices【posi2】.fistarc;
g.vertices【posi2】.fistarc = arc1;
}
}
如果是网的实现,则在存储的时候区分为Wij与∞两种区别(在代码里用极大值表示无穷,如32767)
如果是建立邻接链表,则图的邻接部分应包括出度到的顶点信息和指向下一位置的指针;同理如果是网的邻接链表,则在邻接部分应该加上记录权值的一部分
二、邻接矩阵,邻接表的特点
1).无向图的邻接矩阵特点:1.元素关系(边关系)关于对角线对称2.对角线元素一定为0
3.某一点(i)的度=该行(i)之和
4.如果该图为完全图,则除对角线元素为0之外的所有元素均为1;
2).有向网的临界矩阵特点:
1.不一定再关于对角线对称 2.第i行的元素含义代表了以结点vi为尾的弧(出度)3.第i列的元素含义代表了以vi为头的弧线(入度)4.通过2.3两点可得出:某点(i)的度=第i行之和+第i列之和
3).邻接表的特点:
1.邻接表并不唯一 2.若有n个结点,e条边;则会有n个头节点和2e个表结点3.顶点vi的出度为第i个单位的结点个数 4.结点vi的入度为整个单链表里临界点域值为i-1的节点数
总结:
对于图表有了更进一步的认识,但是发现自身指针,结构体,链表的基础不够牢固
导致到后面建立链表和结构体的时候出现卡壳
希望能尽快解决这个问题,不然无法练习dfs bfs,这两项搜索方法我还是不会用,仍需好好学习
加油(ง •_•)ง(ง •_•)ง(ง •_•)ง