实验8 图
1、编写程序输出以邻接表为存储结构的无向图的各顶点的度。
#include "ljb.h"
void degree(LinkedGraph g)
{
EdgeNode *p;
int count;
int i;
for (i=0;i<g.n;i++)
{
count=0;
p=g.adjlist[i].FirstEdge;
while (p)
{
count++;
p=p->next;
}
printf("D(%d)=%d\n",i,count);
}
}
int main()
{
LinkedGraph g;
creat(&g,"g11.txt",0);
printf("\n The graph is:\n");
print(g);
degree(g);
return 0;
}
2、图采用邻接表存储结构,编程对图进行广度优先遍历。
#include "ljb.h"
int visited[M];
void bfs(LinkedGraph g, int i)
{
int queue[M],front,rear,v;
EdgeNode *p;
front=rear=0;
queue[rear++]=i;
visited[i]=1;
while (front<rear)
{
v=queue[front++];
printf("%c ", g.adjlist[v].vertex);
p=g.adjlist[v].FirstEdge;
while (p)
{
if (visited[p->adjvex]==0)
{
queue[rear++]=p->adjvex;
visited[p->adjvex]=1;
}
p=p->next;
}
}
}
int BfsTraverse(LinkedGraph g)
{
int i,count=0;
for (i=0;i<g.n;i++)
visited[i]=0;
for (i=0;i<g.n;i++)
if (!visited[i])
{
printf("\n");
count++;
bfs(g,i);
}
return count;
}
int main()
{
LinkedGraph g;
int count;
creat(&g,"g11.txt",0);
printf("\n The graph is:\n");
print(g);
printf("广度优先遍历序列为:\n");
count=BfsTraverse(g);
printf("\n该图共有%d个连通分量。\n",count);
return