在做一个数据结构中图的深度优先遍历算法出现了访问权限异常
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define MAXVEX 100
#define INFINITY 65535
typedef char VertexType;//顶点类型
typedef int EdgeType;//权值
typedef int Boolean;
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);//输入边(vi,vj)上的顶点序号
e = (EdgeNode*)malloc(sizeof(EdgeNode));//向内存申请空间,生成边表结点
e->adjvex = j;//邻接序号为j
e->next = G->adjList[i].firstedge;//将e指针指向当前指针指向的结点
G->adjList[i].firstedge = e;//将当前顶点的指针指向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);
printf("深度优先遍历");
DFSTraverse(G);
return 0;
}
>
>
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/946139705696125.png "#left")