- 论坛徽章:
- 0
|
以下是以邻接表为存储结构创建一个图的时候的部分程序
typedef struct ArcNode{
int num; //结点编号
ARC_INFO_TYPE* info;//弧的其他相关信息,如权值等等
struct ArcNode* nextArcNode;//指向下一个表结点的指针
}ArcNode;
//顶点(头节点)
typedef struct VNode{
VERTEX_TYPE data;//顶点的数据
ArcNode* firstArcNode;//指向第一个弧结点的指针
}VNode, AdjList[MAX_VERTEX_NUM];//邻接表
======================
以下创建图:
int CreateALGraph(void){
int i;
int v1,v2;//暂时存放两个相关联点的编号
ArcNode* p;
printf("输入结点个数,边数,图类型:\n");
scanf("%d,%d,%d",&Graph.vertexNum,&Graph.arcNum,&Graph.kind);
printf("输入顶点的数据:\n");
for(i = 0; i < Graph.vertexNum; ++i){ //初始化各个顶点(头节点)
scanf("%c",&adjList[i].data);
adjList[i].firstArcNode = NULL;
}
printf("输入相关联的边:\n");
for(i = 0 ; i < Graph.arcNum; ++i){ //输入所有边(关联的点)编号
scanf("%d,%d",&v1,&v2);
p = (ArcNode*)malloc(sizeof(ArcNode));
p->num = v2;
p- >nextArcNode = adjList[v1].firstArcNode;//这里有问题:提示: DepthFirstSearch.exe 中的 0x0041151d 处未处理的异常: 0xC0000005: 读取位置 0x66a7d804 时发生访问冲突。还有提示:p->nextArcNode = 0xcdcdcdcd {num=??? info=??? nextArcNode=??? }
adjList[v1].firstArcNode = p;
if(!Graph.kind){ //若为无向图
p = (ArcNode*)malloc(sizeof(ArcNode));
p->num = v1;
p->nextArcNode = adjList[v2].firstArcNode;
adjList[v2].firstArcNode = p;
}
}
return 1;
}
//寻求大家的帮助,谢谢 |
|