2022年1月10日学习总结

文章目录:

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,这两项搜索方法我还是不会用,仍需好好学习

加油(ง •_•)ง(ง •_•)ง(ง •_•)ง

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值