对于无向图(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("输入节点数量和边数量 "); 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("输入每一条边 "); 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("** "); 64 outD++;//printf("%d ",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 ",p1->next->adjvex); 80 p1=p1->next; 81 } 82 //if(p1->next==NULL) printf("***** "); 83 if(p1!=NULL && p1->adjvex==y) 84 { 85 //printf("*** "); 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("** "); 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("输入要删除的边 "); 116 //scanf("%d",&i); 117 del(g); 118 outDegree(g,2);// 打印出度 119 return 0; 120 }