#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define MAXVEX 100
#define INFINITY 65535
typedef char VertexType;
typedef int EdgeType;
Boolean visited[100];
#define TRUE 1
#define FALSE 0;
typedef struct EdgeNode//建立边表
{
int adjvex;
EdgeType weight;
struct EdgeNode* next;
}EdgeNode;
typedef struct VertexNode
{
VertexType data;
EdgeNode* firstedge;
}VertexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes, numEdges;
}GraphAdjList;
void CreateALGraph(GraphAdjList* G)
{
int i, j, k;
EdgeNode* e;
printf("输入顶点数和边数:\n");
scanf_s("%d%d", &G->numVertexes, &G->numEdges);
getchar();
printf("请输入顶点信息:");
for (i = 0; i < G->numVertexes; i++)
{
scanf_s("%c", & G->adjList[i].data);
G->adjList[i].firstedge = NULL;
getchar();
}
for (k = 0; k < G->numEdges; k++)
{
printf("输入边(vi,vj)上的顶点序号:\n");
scanf_s("%d%d", &i, &j);
e = (EdgeNode*)malloc(sizeof(EdgeNode));
e->adjvex = j;//邻接序号为j
e->next = G->adjList[i].firstedge;
G->adjList[i].firstedge = e;
free(e);
e = (EdgeNode*)malloc(sizeof(EdgeNode));
e->adjvex = i;
e->next = G->adjList[j].firstedge;
G->adjList[j].firstedge = e;
free(e);
}
printf("\n");
}
void DFS(GraphAdjList GL, int i)
{
EdgeNode* p;//边表
visited[i] = TRUE;
printf("%c", GL.adjList[i].data);
p = GL.adjList[i].firstedge;
while (p)
{
if (!visited[p->adjvex])
DFS(GL, p->adjvex);
p = p->next;
}
}
void DFSTraverse(GraphAdjList G)
{
int i;
for (i = 0; i < G.numVertexes; i++)
visited[i] = FALSE;
for (i = 0; i < G.numVertexes; i++)
if (!visited[i])
DFS(G, i);
}
int main()
{
GraphAdjList G;
CreateALGraph(&G);
DFSTraverse(G);
return 0;
}
enter image description here
如你所见,这是一个数据结构中的DFS算法,但是我遇到了一些麻烦,在输入顶点信息后,编译器显示访问冲突,你能帮我解决这个问题吗,非常感谢!
编译器显示在e->adjvex= j处发生了访问冲突。我不知道在哪里改密码。我希望我的深度优先遍历算法能够运行。
1条答案
按热度按时间u0njafvf1#
firstedge
变成了一个悬空指针,因为你free
了它。