我试了一下可以建立邻接矩阵,但不能按深度优先遍历输出,原因未知,谁看懂了帮忙...
[ 本帖最后由 圣狄雅哥 于 2018-4-21 11:29 编辑 ]\n\n#include <stdio.h>#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAX 100
#define MAXVER 100
typedef int Boolean;
Boolean visited;
typedef struct
{
char vexs;
int arc;
int numVertexes,numEdges;
}MGraph;
void CreateMGraph(MGraph*G)
{
int i,j,k;
printf("请输入顶点数和边数:\n");
scanf("%d %d",&G->numVertexes,&G->numEdges);
printf("输入各顶点:\n");
for(i=0;i<G->numVertexes;i++)
{
scanf("%c",&G->vexs);
}
for(i=0;i<G->numVertexes;i++)
{
for(j=0;j<G->numVertexes;j++)
{
G->arc=0;
}
}
for(k=0;k<G->numEdges;k++)
{
printf("请输入边(Vi,Vj)上的下标i、j,并将权标为1表示连通:\n");
fflush(stdin);
scanf("%d %d",&i,&j);
G->arc=1;
G->arc=G->arc;
}
}
void PrintVexs(MGraph*G)
{
int i,j;
printf("当前无向图的邻接矩阵为:\n");
for(i=0;i<G->numVertexes;i++)
{
for(j=0;j<G->numVertexes;j++)
{
printf("%2d ",G->arc);
}
printf("\n");
}
printf("\n");
}
void DFS(MGraph *G,int i)
{
int j;
visited=TRUE;
printf("%c ",G->vexs);
for(j=0;j<G->numVertexes;j++)
{
if(G->arc==1&&!visited)
{
DFS(G,j);
}
}
printf("\n");
}
void DFSTraverse(MGraph* G)
{
int i;
for(i=0;i<G->numVertexes;i++)
{
visited=FALSE;
}
for(i=0;i<G->numVertexes;i++)
{
if(!visited)
{
DFS(G,i);
}
}
}
int main()
{
MGraph *G;
G=(MGraph*)malloc(sizeof(MGraph));
CreateMGraph(G);
PrintVexs(G);
printf("深度优先遍历结果为:\n");
DFSTraverse(G);
printf("\n");
return 0;
}
didi 邻接矩阵的代码在第16行有误:vistited = TRUE; 应该改为哦vistied = TRUE
页:
[1]