邻接矩阵递归深搜(有向图)

来源:互联网 发布:淘宝整点抢购 编辑:程序博客网 时间:2024/06/06 04:22
此代码是数据结构的原始模板,可以刚接触或考研时借鉴下,不适于刷题
#include<stdio.h>#include<malloc.h>#define INFINITY 32768int visited[100];typedef struct node1{int adj;}gra;typedef struct node2{gra arcs[100][100];int vertex[100];int vexnum,arcnum;}*graph,graph1;int locatevertex(graph &g,int v){int j=0,k;for(k=0;k<g->vexnum;k++){if(g->vertex[k]==v){j=k;break;}}return j;}void create(graph &g){int i,j,k,weight,v1,v2;printf("请输入图的最大顶点数和最大弧数: ");scanf("%d%d",&g->vexnum,&g->arcnum);for(i=0;i<g->vexnum;i++){for(j=0;j<g->vexnum;j++){g->arcs[i][j].adj=INFINITY;}}printf("请输入图的各顶点值: ");for(i=0;i<g->vexnum;i++)scanf("%d",&g->vertex[i]);for(k=0;k<g->arcnum;k++){printf("请输入两顶点表示有关系: ");scanf("%d%d",&v1,&v2);i=locatevertex(g,v1);j=locatevertex(g,v2);g->arcs[i][j].adj=1;}}void depthfirstsearch(graph &g,int v0){printf("%d ",g->vertex[v0]);visited[v0]=1;    for(int i=0;i<g->vexnum;i++){if(visited[i]==0&&g->arcs[v0][i].adj==1)depthfirstsearch(g,i);}}void traversegraph(graph &g){for(int i=0;i<g->vexnum;i++)visited[i]=0;for(i=0;i<g->vexnum;i++){if(visited[i]==0){         depthfirstsearch(g,i);}}}int main(){graph g;g=(graph)malloc(sizeof(graph1));create(g);traversegraph(g);printf("\n");return 0;}

0 0