【正确答案】先设置一个空的邻接表,然后在邻接矩阵上查找值不为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;
}
【答案解析】