怎么用c语言写图的优先遍历程序?

 我来答
大大的Wiener
推荐于2019-08-16 · TA获得超过6.4万个赞
知道大有可为答主
回答量:392
采纳率:90%
帮助的人:33.5万
展开全部

写法:

图的遍历是指按某条搜索路径访问图中每个结点,使得每个结点均被访问一次,而且仅被访问一次。图的遍历有深度遍历算法和广度遍历算法,最近阿杰做了关于图的遍历的算法,下面是图的遍历深度优先的算法(C语言程序):

#include<stdio.h>
#include<malloc.h>
#define MaxVertexNum 5
#define m 5
#define TRUE 1
#define NULL 0
typedef   struct   node

 int  adjvex;
 struct  node  *next;
}JD;
typedef   struct  EdgeNode
{
 int   vexdata;
    JD  *firstarc;
}TD;
typedef struct
{
 TD  ag[m];
 int n;
}ALGRAPH;
void DFS(ALGRAPH *G,int i)
{
 JD *p;
 int visited[80]; 
 printf("visit vertex:%d->",G->ag[i].vexdata);
 visited[i]=1;
 p=G->ag[i].firstarc; 
 while(p)
 {
  if (!visited[p->adjvex])
   DFS(G,p->adjvex);
  p=p->next;
 }
}
void creat(ALGRAPH *G)
{
 int i,m1,j;
 JD *p,*p1;
 printf("please input the number of graph\n");
 scanf("%d",&G->n);
 for(i=0;i<G->n;i++)
 {
  printf("please input the info of node %d",i);
  scanf("%d",&G->ag[i].vexdata);
  printf("please input the number of arcs which adj to  %d",i);
  scanf("%d",&m1);
  printf("please input the adjvex position of the first arc\n");
  p=(JD *)malloc(sizeof(JD));
  scanf("%d",&p->adjvex);
  p->next=NULL;
  G->ag[i].firstarc=p;
  p1=p;
  for(j=2 ;j<=m1;j++)
  {
   printf("please input the position of the next arc vexdata\n");
   p=(JD *)malloc(sizeof(JD));
   scanf("%d",&p->adjvex);
   p->next=NULL;
   p1->next=p;
   p1=p;
  }
 }
}
int  visited[MaxVertexNum];
void DFSTraverse(ALGRAPH *G)
{
 int i;
 for(i=0;i<G->n;i++)
  visited[i]=0;
 for(i=0;i<G->n;i++)
  if(!visited[i])
   DFS(G,i);
}
int main()
{
 ALGRAPH *G;
 printf("下面以临接表存储一个图;\n");
 creat(G);
 printf("下面以深度优先遍历该图 \n");
 DFSTraverse(G);
 getchar();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式