• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++实现邻接表

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

对于无向图(V0,V1),(V1,V2),(V2,V3),(V0,V2)对应的邻接表表示就是

 

 在代码中,你要单独对V1、V2、V3创建一种结构体类型。在对后面的节点0,1,2,3创建一种结构体类型

 

代码:

  1 #include <iostream>
  2 #include<stdio.h>
  3 #define VERTEX 4
  4 using namespace std;
  5 // 边表结点
  6 typedef struct edgenode
  7 {
  8     int adjvex;
  9     struct edgenode *next;
 10 } Node;
 11 // 顶点表结点
 12 typedef struct adjlist
 13 {
 14     int vex;
 15     Node *link;
 16 } VertexNode, AdjList[VERTEX];
 17 //
 18 typedef struct
 19 {
 20     int n, e;
 21     AdjList adj;
 22 
 23 } AdjGraph;
 24 // 创建图
 25 void createAdjGraph(AdjGraph &g)
 26 {
 27     int cnt;
 28     printf("输入节点数量和边数量\n");
 29     scanf("%d%d",&g.n,&g.e);
 30     for(int i=1;i<=g.n;++i)
 31         g.adj[i].link=NULL;
 32     cnt=g.e;
 33     Node *p1;
 34     printf("输入每一条边\n");
 35     while(cnt--)
 36     {
 37 
 38         int x,y;
 39         scanf("%d%d",&x,&y);
 40 
 41         p1=new Node;
 42         p1->adjvex=y;
 43         p1->next=g.adj[x].link;
 44         g.adj[x].link=p1;
 45 
 46         swap(x,y);
 47 
 48         p1=new Node;
 49         p1->adjvex=y;
 50         p1->next=g.adj[x].link;
 51         g.adj[x].link=p1;
 52     }
 53 }
 54 // 求图中顶点的出度
 55 void outDegree(AdjGraph g,int i)
 56 {
 57     Node *p;
 58     int outD;
 59     outD = 0;
 60     p = g.adj[i].link;
 61     while(NULL != p)
 62     {
 63         //printf("**\n");
 64         outD++;//printf("%d\n",p->adjvex);
 65         p = p->next;
 66 
 67     }
 68     cout << "顶点" << i << "的出度为:" << outD << endl;
 69 }
 70 
 71 void del(AdjGraph g)
 72 {
 73     int x,y;
 74     Node *p1=NULL,*p2=NULL;
 75     scanf("%d%d",&x,&y);
 76     p1=g.adj[x].link;
 77     while(p1!=NULL && p1->adjvex!=y)
 78     {
 79         //printf("%d\n",p1->next->adjvex);
 80         p1=p1->next;
 81     }
 82     //if(p1->next==NULL) printf("*****\n");
 83     if(p1!=NULL && p1->adjvex==y)
 84     {
 85         //printf("***\n");
 86         p2=p1;
 87         p1=p1->next;
 88         if(p1->next!=NULL)
 89         p2->next=p1->next;
 90         else p2->next=NULL;
 91     }
 92 
 93     swap(x,y);
 94 
 95     p1=g.adj[x].link;
 96     while(p1!=NULL && p1->adjvex!=y)
 97     {
 98         p1=p1->next;
 99     }
100     if(p1!=NULL && p1->adjvex==y)
101     {
102         //printf("**\n");
103         p2=p1;
104         p1=p1->next;
105         if(p1->next!=NULL)
106         p2->next=p1->next;
107         else p2->next=NULL;
108     }
109 }
110 int main()
111 {
112     AdjGraph g;
113     createAdjGraph(g);
114     int i;
115     printf("输入要删除的边\n");
116     //scanf("%d",&i);
117     del(g);
118     outDegree(g,2);// 打印出度
119     return 0;
120 }

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Codeforces323CTwopermutations发布时间:2022-07-14
下一篇:
i2cdrivers发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap