无向图邻接表改为邻接矩阵

来源:互联网 发布:怎么退出手机淘宝账号 编辑:程序博客网 时间:2024/06/12 18:32
#include <stdio.h>#include <string.h>#include <stdlib.h>int a[100][100];//邻接矩阵的载体 typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;}ArcNode; //表结点 typedef struct VNode{char data;ArcNode *firstarc;}VNode,AdjList[20];//头结点 typedef struct{AdjList vertices;int vexnum,arcnum;}ALGraph;//邻接表 int LocateVex(ALGraph G,char e){int i;for(i=0;i<G.vexnum;i++){if(G.vertices[i].data==e)return i;//找到后 返回i }return -1;}void CreatAdList(ALGraph &G){//根据输入的有向图G的顶点数及边数,建立图G的邻接表int i,j,k,tmp;char v1,v2;ArcNode *s,*p;scanf("%d%d",&G.vexnum,&G.arcnum);getchar();for(i=0;i<G.vexnum;i++) //初始化头结点 {scanf("%c",&G.vertices[i].data);getchar();G.vertices[i].firstarc=NULL;}for(i=0;i<G.vexnum;i++)//输出一遍这些头 {printf("%c ",G.vertices[i].data);}printf("\n");for(k=0;k<G.arcnum;k++){//输入边 scanf("%c %c",&v1,&v2);getchar();i=LocateVex(G,v1);j=LocateVex(G,v2);s= (ArcNode *)malloc(sizeof(ArcNode));s->adjvex=j;s->nextarc=NULL;p=G.vertices[i].firstarc;if(!p){G.vertices[i].firstarc = s;}else{while(p->nextarc)p=p->nextarc;p->nextarc=s;}tmp=i;i=j;j=tmp;s= (ArcNode *)malloc(sizeof(ArcNode));s->adjvex=j;s->nextarc=NULL;p=G.vertices[i].firstarc;if(!p){G.vertices[i].firstarc = s;}else{while(p->nextarc)p=p->nextarc;p->nextarc=s;}}}//CreateAdiMatrixvoid trans(ALGraph G){//转换函数 int i,j;ArcNode *p;for(i=0;i<=G.vexnum;i++)//先初始化,全部赋值为0 for(j=0;j<=G.vexnum;j++){a[i][j]=0;}for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p){a[i][p->adjvex]=1;p=p->nextarc;}}}void Output(ALGraph &G){int i,j;for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++){printf("%d ",a[i][j]);}printf("\n");}}int main(){ALGraph G;printf("有向图处理篇\n");CreatAdList(G);trans(G);Output(G);return 0;}

原创粉丝点击