#include <stdio.h>
#include <stdlib.h>
#define vertexnum 9
struct node
{
int vertex;
struct node *next;
};
typedef struct node *graph;
struct node head[vertexnum];
int visited[vertexnum];
void Dfs(int vertex)
{
graph pointer;
visited[vertex]=1;
printf("[%d]==>",vertex);
pointer=head[vertex].next;
while(pointer!=NULL)
{
if(visited[pointer->vertex]==0)
Dfs(pointer->vertex);
pointer=pointer->next;
}
}
void Creat_graph(int vertex1,int vertex2)
{
graph pointer,new1;
new1=(graph)malloc(sizeof(struct node));
if(new1!=NULL)
{
new1->vertex=vertex2;
new1->next=NULL;
pointer=&(head[vertex1]);
while(pointer->next!=NULL)
pointer=pointer->next;
pointer->next=new1;
}
}
void Print_graph(struct node *head)
{
graph pointer;
pointer=head->next;
while(pointer!=NULL)
{
printf("[%d]",pointer->vertex);
pointer=pointer->next;
}
printf("\n");
}
void main()
{
int i;
int node[20][2]={{1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3},{3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}};
for(i=0;i<vertexnum;i++)
{
head[i].vertex=i;
head[i].next=NULL;
}
for(i=0;i<vertexnum;i++)
visited[i]=0;
for(i=0;i<20;i++)
Creat_graph(node[i][0],node[i][1]);
printf("\n 图的邻接表表示为:\n");
for(i=0;i<vertexnum;i++)
{
printf("vertex[%d]:",i);
Print_graph(&head[i]);
}
printf(" 深度优先遍历为:\n");
printf("[开始]==>");
Dfs(1);
printf("[结束] \n");
}
``![在这里插入图片描述](https://img-blog.csdnimg.cn/20200606150835739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MTUzMTU4,size_16,color_FFFFFF,t_70)
图遍历的演示——数据结构
最新推荐文章于 2022-01-29 21:44:36 发布