C语言深度优先遍历图算法程序实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{
int adjvertex;/*定点序号,存放顶点下标*/
int info;
/*与边或弧相关的信息,对于网图来说*/
struct node *next; /* 指向下一个临接点的指针域*/
}Node;
typedef struct vnode /*顶点节点*/
{
char vertex[3];
/*顶点域*/
scanf("%d%d",&i,&j);
p=(Node*)malloc(sizeof(Node));
p->adjvertex=j; /*邻接点序号为 j*/
p->next=G.adjlist[i].firstedge;/*将新边表节点插入到顶点 vi 的链表头部*/
G.adjlist[i].firstedge=p;
Node *firstedge;
/*表节点头指针*/
}Vnode;
typedef struct
{
Vnode adjlist[Maxvertexnum];/*邻接表*/
int vnum;egnum;/*顶点数和边数*/
}Algraph;
Algraph Creat() /*建立有向图的邻接表存储*/
{
Algraph G;
}
return (G);
}
int visited[Maxvertexnum];
void DFS(Algraph G,int x)
/*从第 v 个顶点出发深度优先遍历图 G*/
{
Node *p;
int w;
printf("Node num:%d\tNode infor:%s\n",count,G.adjlist[x].vertex);
}
}
void Dfstrave(Algraph G)/*深度优先遍历邻接表表示的图 G*/
{
int v;
for(v=0;v<G.vnum;v++)
visited[v]=False;/*标志向量初始化*/
for(v=0;v<G.vnum;v++)
if(visited[v]!=1)DFS(G,v);
}
void main()
scanf("%s",&(G.adjlist[i].vertex));/*读入顶点信息*/
G.adjlist[i].firstedge=NULL;/*表节点头节点均设为空*/
}
for(k=0;k<G.egnum;k++)
{
getchar();/*屏蔽回车*/
printf("Input edge <vi,vj>:\n");
/*建立邻接表算法*/
/*邻接表,顺序存储与链式存储相结合的方法*/
#define Maxvertexnum 30
#define False 0
#define True 1
#include"stdio.h"
#include"stdlib.h"
int count=1;
typedef struct node /*链表(表节点)信息 */
int i,j,k;
Node *p;
printf("Input vnum and egnum:\n");
scanf("%d%d",&(G.vnum),&(G.egnum));
for(i=0;i<G.vnum;i++)
{
getchar();/*屏蔽回车*/
printf("Input vode information:\n");
count++;
visited[x]=True;/*访问第 v 个顶点,并把标志位置 0*/
for(p=G.adjlist[x].firstedge;p!=NULL;p=p->next)
{
w=p->adjvertex;
if(visited[x]!=1)DFS(G,w);/*对 v 尚未访问的节点调用 DFS*/
{ຫໍສະໝຸດ Baidu
Algraph A;
A=Creat();
Dfstrave(A);
getch();
}
相关文档
最新文档