阅读 53

无向图的邻接表怎么画,有向图的邻接表存储结构

# include stdio.h # include stdlib.h # definevertextypechar//顶点的数据类型(char ) #define VertexMax 20 //最大顶点数typedefstructarctarc }ArcNode; typedef struct VNode //单个顶点{VertexType vertex; struct ArcNode *firstarc; }VNode; typedef struct //顶点表{VNode AdjList[VertexMax]; //由顶点构成结构体排列int vexnum,arcnum; //顶点数和边数int kind; //记录图的类型(}ALGraph; intlocateVEX(algraph*g,VertexType v ) { int i; for(I=0; iG-vexnum; I ) if(v==g-adjlist[I].vertex ) {return i; }printf(nosuchvertex! \n '; 返回- 1; //1 .有向图voidcreatedg(Algraph*g ) {int i,j; //1 .输入顶点数和边数printf (输入顶点数和边数(n ) ); printf (顶点数n=); scanf('%d ',G-vexnum ); printf (边数e=); scanf('%d ',G-arcnum ); 打印((n ); 打印((n ); //2 .顶点表数据字段值初始化顶点表指针字段printf (输入顶点元素(用空格分隔):'); for(I=0; iG-vexnum; I ) Scanf('%c ',G-AdjList[i].vertex ); G-AdjList[i].firstarc=NULL; }printf((n ); //3 .输入边信息制作邻接表int n,m; VertexType v1,v2; ArcNode *p1,*p2; printf ('请输入边缘信息(不需要用空格分隔) (\n\n ' ); for(I=0; iG-arcnum; I )//输入边缘信息,输入g中的v1和v2的位置,即AdjList[]阵列中的顶点的位置(下标) printf )、第d个边缘信息)、i 1 ); scanf('%c%c )、v1和v2 ); n=locatevex(g,v1 ); m=locatevex(g,v2 ); if(n==-1||m==-1 ) ) printf(nothisvertex! \n '; 返回; (P1=(arcnode* ) malloc ) sizeof ) arcnode ); p1-adjvex=m; //坐标p1-next=G-AdjList[n].firstarc; //换链(插头法) G-AdjList[n].firstarc=p1; }//for G-kind=1; //2 .无向图voidcreateudg(Algraph*g ) ) {int i,j; //1 .输入顶点数和边数printf (输入顶点数和边数(n ) ); printf (顶点数n=); scanf('%d ',G-vexnum ); printf (边数e=); scanf('%d ',G-arcnum ); 打印((n ); 打印((n ); //2 .顶点表数据字段值初始化顶点表指针字段printf (输入顶点元素(无空格分隔):'); for(I=0; iG-vexnum; I ) Scanf('%c ',G-AdjList[i].vertex ); G-AdjList[i].firstarc=NULL; }printf((n ); //3 .输入边信息制作邻接表int n,m; VertexType v1,v2; ArcNode *p1,*p2; 请输入printf ('边缘的信息。 \n\n ); for(I=0; iG-arcnum; I )//输入边缘信息,输入g中的v1和v2的位置,即AdjList[]阵列中的顶点的位置(下标) printf )、第d个边缘信息)、i 1 ); scanf('%c%c )、v1和v2 ); n=locatevex(g,v1 ); m=locatevex(g,v2 ); if(n==-1||m==-1 ) ) printf(nothisvertex! \n '; 返回; (P1=(arcnode* ) malloc ) sizeof ) arcnode ); p1-adjvex=m; //坐标p1-next=G-AdjList[n].firstarc; //换链(插头法) G-AdjList[n].firstarc=p1; P2=(arcnode* ) malloc (sizeof ) arcnode ); //有向图的对称p2-adjvex=n; p2-next=G-AdjList[m].firstarc; G-AdjList[m].firstarc=p2; }//for G-kind=2; }voidprint(Algraphg ) {int i; ArcNode *p; printf ((n---------' ); 显示printf((n图旁边的表为(n ) )。 for(I=0; iG.vexnum; I ) (printf((nadjlist[%d]l ),I,G.AdjList[i].vertex ); p=G.AdjList[i].firstarc; while(p!=null(printf('--%d ',p-adjvex ); p=p-next; }printf () (n ); }voidgraphchoice(Algraph*g ) {int target; 请选择printf ()图的类型。 1 .有向图DG 2 .有向图udg(n(n ) ); scanf('%d ',target ); //图类型printf (选择() () ) ); sitch(target ) /根据选择的类型,调用不同的函数来实现制图功能({ case 1: printf ) (1.DG\n\n ) ); printf------------\n '; createdg(g ); 布雷克; case 2: printf ('选择的是2.UDG\n\n ' ); printf------------\n '; 创建udg (g ); 布雷克; default: printf ('无效选择! 请重新选择。 \n\n '; printf------------\n '; graphchoice(g ); 布雷克; }}int main () {ALGraph G; graphchoice(g ); print(g; 返回0; }

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐