#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAX 100
struct ArcNode //边节点
{
int adjvex;
ArcNode *nextarc;
};
struct VNode
{
int data;
ArcNode *head1; //入边的表头指针
ArcNode *head2; //出边的表头指针
};
struct LGraph
{
VNode vertexs[MAX]; //顶点数组
int vexnum, arcnum; //顶点数和边数
};
LGraph lg;
void CreateLG()
{
int i = 0;
ArcNode *pi;
int v1, v2;
lg.vexnum = lg.arcnum = 0;
scanf( "%d%d", &lg.vexnum, &lg.arcnum );
for( i = 0; i < lg.vexnum; i++ ) //初始化
lg.vertexs[i].head1 = lg.vertexs[i].head2 = NULL;
for( i = 0; i < lg.arcnum; i++ ) //邻接表的插入
{
scanf( "%d%d", &v1, &v2 );
v1--; v2--;
pi = (ArcNode *)malloc( sizeof(ArcNode) );
pi->adjvex = v2;
pi->nextarc = lg.vertexs[v1].head1;
lg.vertexs[v1].head1 = pi;
pi = (ArcNode *)malloc( sizeof(ArcNode) );
pi->adjvex = v1;
pi->nextarc = lg.vertexs[v2].head2;
lg.vertexs[v2].head2 = pi;
}
}
void DeleteLG() //删除邻接表
{
int i;
ArcNode *pi;
for( i = 0; i < lg.vexnum; i++ )
{
pi = lg.vertexs[i].head1;
while( pi != NULL )
{
lg.vertexs[i].head1 = pi->nextarc;
free( pi );
pi = lg.vertexs[i].head1;
}
pi = lg.vertexs[i].head2;
while( pi != NULL )
{
lg.vertexs[i].head2 = pi->nextarc;
free( pi );
pi = lg.vertexs[i].head2;
}
}
}
int main() //主函数
{
int i;
int id, od;
ArcNode *pi;
while( 1 )
{
lg.vexnum = lg.arcnum = 0;
scanf( "%d%d", &lg.vexnum, &lg.arcnum );
if( lg.vexnum == 0 ) break;
CreateLG( );
for( i = 0; i < lg.vexnum; i++ )
{
od = 0;
pi = lg.vertexs[i].head1;
while( pi != NULL )
{
od++;
pi = pi->nextarc;
}
if( i == 0 ) printf( "%d", od );
else printf( " %d", od );
}
printf( "\n" );
for( i = 0; i < lg.vexnum; i++ )
{
id = 0;
pi = lg.vertexs[i].head2;
while( pi != NULL )
{
id++;
pi = pi->nextarc;
}
if( i == 0 ) printf( "%d", id );
else printf( " %d", id );
}
printf( "\n" );
DeleteLG();
}
return 0;
}
图的邻接表
最新推荐文章于 2025-05-15 09:30:38 发布
1500

被折叠的 条评论
为什么被折叠?



