#include<stdio.h>
#include<stdlib.h>
#define Max_vertex 20
typedef enum
{
FALSE,
TRUE
}Boolean;
Boolean visited[Max_vertex];
typedef char vertextype;
typedef struct edgenode
{
int adjvex;
struct edgenode *next;
}EdgeNode;
typedef struct vertexnode
{
vertextype vertex;
EdgeNode * firstedge;
}VertexNode;
typedef VertexNode AdjList[Max_vertex];
typedef struct ALGraph
{
AdjList adjlist;
int n,e;
}Graphic;
void createGraphic(Graphic *G)
{
int i,j,k;
EdgeNode *s;
printf("please input the vertexs' number and Edges' number:\n");
fflush(stdin);
scanf("%d%d",&G->n,&G->e);
getchar();
printf("please input the vertexs' information.\n");
for(i=1;i<(G->n+1);i++)
{
fflush(stdin);
G->adjlist[i].vertex=getchar();
G->adjlist[i].firstedge=NULL;
getchar();
}
printf("please input the nodes(double):\n");
for(k=1;k<(G->e+1);k++)
{
scanf("%d%d",&i,&j);
getchar();
s=(EdgeNode *)malloc(sizeof(EdgeNode));
if(!s)
{
printf("overflow!");
exit(0);
}
else
{
s->adjvex=j;
s->next=G->adjlist[i].firstedge;
G->adjlist[i].firstedge=s;
s=(EdgeNode *)malloc(sizeof(EdgeNode));
if(!s)
{
printf("overflow!");
exit(0);
}
else
{
s->adjvex=i;
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;
}
}
}
}
void DFS(Graphic *G,int i)
{
EdgeNode *p;
printf("visitvertex:%c\n",G->adjlist[i].vertex);
visited[i]=TRUE;
p=G->adjlist[i].firstedge;
while(p)
{
if(!visited[p->adjvex])
DFS(G,p->adjvex);
p=p->next;
}
}
void DFSTraverse(Graphic *G)
{
int i;
for(i=1;i<(G->n+1);i++)
visited[i]=FALSE;
for(i=1;i<(G->n+1);i++)
if(!visited[i])
DFS(G,i);
}
void main(void)
{
Graphic create;
clrscr();
createGraphic(&create);
DFSTraverse(&create);
}
正文
图的邻接表建立及深度优先搜索2005-05-14 13:02:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/jay0518/1048.html
阅读(5197) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论