原创 图的深度遍历

2010-1-18 18:21 3080 7 7 分类: 软件与OS

#include <stdio.h>


#include <malloc.h>


# define n 8  //顶点数


# define e 9  //边数


# define TRUE 1


typedef struct


{char vexs[n];        //顶点数组


 int arcs[n][n];      //权值矩阵


}graph;


 


int visited[n];              //定义布尔常量数组


graph ga;


void DFS(i)    //图的深度遍历子函数


int i;


{int j;


printf("node:%c\n",ga.vexs);        //输出遍历的顶点


visited=TRUE;


for(j=0;j<n;j++)


    if((ga.arcs[j]==1)&&(!visited[j]))


        DFS(j);


}


 


void print_graph(graph ga)             输出矩阵


{


 int i,j;


 printf("linjie ju zhen:\n");


 printf("vertex\t ");


 for(i=0;i<n;i++)


   printf("%c",ga.vexs);//shuchudingdian


 printf("\n");


 for(i=0;i<n;i++)//shuchu qunazhi juzhen


 {


   printf("\t%c",ga.vexs);


   for(j=0;j<n;j++)


     printf("%d",ga.arcs[j]);


    printf("\n");


 }


}


 


void main()


{


int i,j,k;


int w;


 //clrscr();


printf("please input dingdian xulie:\n");     //输入节点序列


 for(i=0;i<n;i++)


     ga.vexs=getchar();


 for(i=0;i<n;i++)


     for(j=0;j<n;j++)


        ga.arcs[j]=0;            //初始化矩阵为 0


printf("please input hang lie quanzhi:\n");


for(k=0;k<e;k++)


 {scanf("%d %d %d",&i,&j,&w);//i 为行,j为列 ,w 为权值


  ga.arcs[j]=w;


  ga.arcs[j]=w;


  }


printf("linjie juzhen wei:\n");


 print_graph(ga);


printf("shendu bianli jieguo wei:\n");


  printf("please input the number of the point to cover:\n");


 scanf("%d",&i);          //从第i个节点开始遍历


DFS(i);


}


f365d9d5-4233-4b69-85da-df5ff9037569.jpg

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条