数据结构—图
1.基于邻接矩阵创建图的算法;
MGraph( datatype a[ ], int n, int e)
{ int vertexNum,arcNum;
vertexNum=n; arcNum=e;
for (i=0; i<vertexNum; i++)
vertex[i]=a[i];
for (i=0; i<vertexNum; i++) //初始化邻接矩阵
for (j=0; j<vertexNum; j++)
arc[i][j]=0;
for (k=0; k<arcNum; k++) //依次输入每一条边
{
scanf(“%d%d”,&i,&j); //边依附的两个顶点的序号
arc[i][j]=1; arc[j][i]=1; //置有边标志
}
}
2.输出图的邻接矩阵的算法;
void DFSTraverse(int v)
{
printf(“%d”,vertex[v]);
visited [v]=1;
for (j=0; j<vertexNum; j++)
if (arc[v][j]==1 && visited[j]==0)
DFSTraverse( j );
}
3:基于邻接矩阵存储结构的图的深度优先遍历算法(递归算法)
4.邻接表的定义:
struct ArcNode
{ int adjvex;
ArcNode *next;
};
struct VertexNode
{
datatype vertex;
struct ArcNode *firstedge;
};
5:基于邻接表创建图的算法;
void ALGraph( datatype a[ ], int n, int e)
{
vertexNum=n; arcNum=e;
for (i=0; i<vertexNum; i++)
//输入顶点信息,初始化边表
{
adjlist[i].vertex=a[i];
adjlist[i].firstedge=NULL;
}
for (k=0; k<arcNum; k++)
//输入边的信息存储在边表中
{
scanf(“%d%d”,&i,&j);
s=( ArcNode*)malloc(sizeof(ArcNode));
s->adjvex=j;
s->next=adjlist[i].firstedge;
adjlist[i].firstedge=s;
}
}
6:输出图的邻接表的算法;
void displayALgraph(int vertexNum)
{ int i,j;
datatype x,y;
struct ArcNode *p;
printf("\n输出顶点的值及其邻接边:\n");
for (i=0; i<vertexNum; i++) //输出顶点的值
{
x = adjlist[i].data;
printf("%d :", x );
p = adjlist[i].first;
while( p )
{
j = p->vertex;
y = adjlist[j].data;
printf("(%d,%d) ",x,y);
p = p->next;
}
printf("\n");
}
}
;