C语言课程设计报告_图的遍历的演示

C语言课程设计报告_图的遍历的演示|c语言程序代码编程小程序设计|c语言课程设计报告课程案例

#define M 20
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*定义图*/
typedef struct{
  int V[M];
  int R[M][M];
  int vexnum;
}Graph;

/*创建图*/
void creatgraph(Graph *g,int n)
{
  int i,j,r1,r2;
  g->vexnum=n;
  /*顶点用i表示*/
  for(i=1;i<=n;i++)
  {
    g->V[i]=i;
  }
  /*初始化R*/
  for(i=1;i<=n;i++)
   for(j=1;j<=n;j++)
    {
      g->R[i][j]=0;
    }
  /*输入R*/
  printf("Please input R(0,0 END):\n");
  scanf("%d,%d",&r1,&r2);
  while(r1!=0&&r2!=0)
   {
    g->R[r1][r2]=1;
    g->R[r2][r1]=1;
    scanf("%d,%d",&r1,&r2);
   }
}

/*打印图的邻接矩阵*/
void printgraph(Graph *g)
{
 int i,j;
 for(i=1;i<=g->vexnum;i++)
 { for(j=1;j<=g->vexnum;j++)
   {
     printf("%2d ",g->R[i][j]);
   }
   printf("\n");
   }
}
/*全局变量:访问标志数组*/
int visited[M];
/*访问顶点*/
void visitvex(Graph *g,int vex)
{
 printf("%d ",g->V[vex]);
}

/*获取第一个未被访问的邻接节点*/
int firstadjvex(Graph *g,int vex)
{
 int w,i;
 for(i=1;i<=g->vexnum;i++)
  {
   if(g->R[vex][i]==1&&visited[i]==0)
    {
      w=i;
      break;
    }
   else
    {
      w=0;
    }
  }
  return w;
}
/*获取下一个未被访问的邻接节点(深度遍历)*/
int nextadjvex(Graph *g,int vex,int w)
{
  int t;
  t=firstadjvex(g,w);
  return t;
}
/*深度递归遍历*/
  void dfs(Graph *g,int vex)
   {
    int w;
    visited[vex]=1;
    visitvex(g,vex);
    for(w=firstadjvex(g,vex);w>0;w=nextadjvex(g,vex,w))
      if(!visited[w])
       {
 dfs(g,w);
       }
   }

[1] [2] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有