图的深度优先遍历(C语言描述)求各位大虾看看这个程序哪里错了????求指点,谢谢了.要求用邻接矩阵

2025-05-14 02:15:48
推荐回答(1个)
回答(1):

#include
#define Max 20
#define True 1
#define False 0

typedef char VertexData;
typedef struct ArcNode
{
int adj;
}ArcNode;

typedef struct
{
VertexData vertex[Max];
ArcNode arcs[Max][Max];
int vexnum,arcnum;
}AdjMatrix;

int LocateVertex(AdjMatrix *G,VertexData v)
{
int j,k;
for(k=0;kvexnum;k++)
if(G->vertex[k]==v)
{
j=k;
break;
}
return j;
}

int CreateDN(AdjMatrix *G)
{
int i,j,k,weight;
VertexData v1,v2;
printf("请输入图的顶点数和弧数:\n");
scanf("%d %d",&G->vexnum,&G->arcnum);
fflush(stdin);
for(i=0;ivexnum;i++)
for(j=0;jvexnum;j++)
G->arcs[i][j].adj=0;

printf("请输入图的顶点:\n");
for(i=0;ivexnum;i++)
scanf("%c",&G->vertex[i]);

fflush(stdin);
printf("请输入一条弧的两个顶点及一个表示是否相连的数即0或1:\n");
for(k=0;karcnum;k++)
{
fflush(stdin);
scanf("%c %c %d",&v1,&v2,&weight);
i=LocateVertex(G,v1);
j=LocateVertex(G,v2);
G->arcs[i][j].adj=weight;
G->arcs[j][i].adj=weight;
}
return 0;
}

int visited[Max];
void DepthFirstSearch(AdjMatrix g,int v0);
void TraverseGraph(AdjMatrix g)
{
int vi;
for(vi=0;vi visited[vi]=False;
for(vi=0;vi if(!visited[vi])DepthFirstSearch(g,vi);
}

void DepthFirstSearch(AdjMatrix g,int v0)
{
int vj;
printf("%c ",g.vertex[v0]);
visited[v0]=True;
for(vj=0;vj if(!visited[vj]&&g.arcs[v0][vj].adj==1)
DepthFirstSearch(g,vj);
}

int main()
{
AdjMatrix g;
CreateDN(&g);
TraverseGraph(g);
printf("\n");
return 0;
}

这是我写的,你先看看吧。。。