邻接矩阵转换成邻接表.docVIP

  • 136
  • 0
  • 约2千字
  • 约 3页
  • 2019-08-19 发布于江西
  • 举报
源程序(邻接矩阵转换成邻接表): #includestdio.h #includemalloc.h #define maxlen 100 typedef struct { int num; char data; }VER; //顶点类型 typedef struct {int n; int e; VER ve[maxlen]; int edges[maxlen][maxlen]; }MG; //邻接矩阵类型 typedef struct AR { int adjvex; char info; struct AR *nextarc; }AR; //结点类型 typedef struct VEX { char vexdata; AR *firstarc; }VEX,adj[maxlen]; //表结点类型 typedef struct { adj vext; int vexnum,arcnum; }ALG; //邻接表类型 MG *creat() //创建邻接矩阵 { MG *p;int i,j,k,l,w; p=(MG *)malloc(sizeof(MG)); printf(输入矩阵结点个数数和边的数目:); scanf(%d%d,p-n,p-e); for(i=1;i=p-n;i++) //初始化邻接表 for(j=1;j=p-n;j++) p-edges[i][j]=0; getchar(); printf(请输入结点的信息:); for(i=1;i=p-n;i++) {scanf(%c,p-ve[i].data );getchar(); p-ve[i].num=i;} printf(请输入边的两个结点的序号以及权值:\n); for(i=1;i=p-e;i++) {scanf(%d%d%d,k,l,w); p-edges[k][l]=w;} return p; } ALG *change(MG *p) // 邻接矩阵转换成邻接表函数 {ALG *q; adj k; AR *l; int i,j; q=(ALG *)malloc(sizeof(ALG)); for(i=1;i=p-n;i++) //初始化表头结点 {k[i].vexdata=p-ve[i].data; k[i].firstarc=NULL; } for(i=1;i=p-n;i++) //邻接矩阵转化成邻接表的主要算法 for(j=1;j=p-n;j++) if(p-edges[i][j]!=0) { l=(AR *)malloc(sizeof(AR)); l-info=p-ve[j].data; l-adjvex=p-ve[j].num; l-nextarc=k[i].firstarc; k[i].firstarc=l; } for(i=1;i=p-n;i++) //将各种数据存入图中 q-vext[i]=k[i]; q-vexnum=p-n; q-arcnum=p-e; return q; } void shuchu(ALG *p) //输出函数 {int i; printf(转换成邻接表结果为:); for(i=1;i=p-vexnum;i++) {printf(\n); if(p-vext[i].firstarc==NULL) //控制输出格式 printf(%c--∧ ,p-vext[i].vexdata); else printf(%c--,p-vext[i].vexdata); while(p-vext[i].firstarc!=NULL) {printf(%c,p-vext[i].firstarc-info);printf(-); p-vext[i].firstarc=p-vext[i].firstarc-nextarc; } printf(\b\b ); //控制输出格式 } printf(\n); } void main() {MG *p;ALG *q; p=creat(); //调用各子函数 q=change(p); shuchu(q); }

文档评论(0)

1亿VIP精品文档

相关文档