问答题 编写一个算法,将一个无向图的邻接矩阵转换成邻接表。
【正确答案】先设置一个空的邻接表,然后在邻接矩阵上查找值不为0的元素,找到后创建表结点并在邻接表对应的单链表中插入该结点。 本题程序代码如下: void mattolist(int a[][maxSize],graph *g,int n) {//a是已知邻接矩阵,maxSize是可能的最大定点数 int i,j,m=0; //n为顶点数,m为记录边数 arcnode *p; for(i=0;i<n;i++) g→adjlist[i].firstarc=NULL; //先将表置空 for(i=0;i<n;i++) //双循环扫描整个矩阵,建立邻接表 for(j=n-1;j>=0; --j) if(a[i][j]!=0) { m++; p=(arcnode *)malloc(sizeof(arcnode)); p→adjvex=j; p→nextarc=g→adjlist[i].firstarc; g→adjlist[i].firstarc=p; //头插法建表 } g→vexnum=n;g→arcnum=m; }
【答案解析】