此代码是数据结构的原始模板,可以刚接触或考研时借鉴下,不适于刷题
#include<stdio.h>
#include<malloc.h>
#define INFINITY 32768
int 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;
}