【数据结构】考试自用 邻接表创建无向图

算法思路:
1. 写出邻接表定义
2.输入顶点和边界点的个数,循环将所有顶点赋值,将所有顶点的firstarc边界点指向为null
3.for循环所有边节点, cin输入两个顶点v1v2(因为每一条边对应两个结点),使用LocateVex函数定位两个顶点所在的位置。生成边界点p1,结合上图 比如p1是连接V0到V3的 那p1->adjvex=3也就是j,再用头插法将p1插在V1后的边链中,即p1->nextarc=G.vertices[i].firstarc; 再让G指向p1:G.vertices[i]=p1;
同理 V3的边结点中增加边界点(边界点值为V1,如果是无向图则更简单一些,不如这一步)即:p2=new ArcNode; p2->adjvex=i; p2->nextarc=G.vertices[j].firstarc;G.vertices[j].firstarc=p2;
//邻接表定义

#define MAXNUM 100
typedef struct ArcNode{
    int adjvex;//该边所指向顶点的的位置  该边的值为指向顶点的值 比如0-》1  那这个值就是1
    struct ArcNode *nextarc;
    OtherInfo info;//其他信息 比如带权值的
}ArcNode
typedef struct Vnode{
    VerTexType data;//顶点值
    ArcNode *firstarc; //顶点指向第一个邻接的边节点
}Vnode,AdjList[MAXNUM]
typedef struct{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph;

//以邻接表创建图
Status createGraph(ALGraph &G){
    cin>>G.vexnum>>G.arcnum;
    //给所有顶点输入值
    for(i=0;i<G.vexnum;i++){
        cin>>G.vertices[i].data;
        G.vertices[i].firstarc=null;
    }
    //输入所有边
    for(k=0;i<G.arcnum;k++){
        cin>>v1>>v2;
        i=Locate(G,v1);
        j=Locate(G,v2);
        p1=new ArcNode;
        p1->adjvex=j;// p1指向的是j  其实就是无向图里 一对应2   那1的第一个边结点的值就是2
        p1->nextarc=G.vertices.[i].firstarc;//将p1头插法插入到后面
        G.vertices.[i].firstarc=p1;
        p2=new ArcNode; //p2就相当于是 2指向1 则让p2边节点的值为1 然后头插法插入到2的后面
        p2->adjvex=i;
        p2->nextarc=G.vertices.[j].firstarc;
        G.vertices.[i].firstarc=p2;
    }
    return OK;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值