我的报错全是这样子,不是很能明白这样哪里错了?对照书本的也是这样写,这个插入边的算法到底哪里有问题呢?请帮我看看我的InsertArc函数里面的问题,因为报错全都是这样子的。谢谢!困惑了好几天了诶
#include <stdio.h>
#include <stdlib.h>
#define maxint 32767
#define mvnum 100
#define OK 1
#define ERROW 0
#define OVERFLOW -1
typedef struct ArcNode//边节点
{int adjvex; //记录该条边所指向的顶点的位置
struct AcrNode * nextarc; //指向下一条边的指针
}ArcNode;
typedef struct VNode //顶点信息
{int data;
ArcNode *firstarc; //指向第一条边的指针
}VNode,Adjlist[mvnum];
typedef struct
{Adjlist vertices;
int vexnum,arcnum; //记录顶点个数和边数
}ALGraph;
//邻接表
void InsertVex (ALGraph &G,int i) //加入顶点
{G.vertices[G.vexnum].data=i;
G.vertices[G.vexnum].firstarc=NULL;
G.vexnum+=1;
}
int alocatedvex(ALGraph &G,int m) //查找顶点位置
{for(int i=0;i<G.vexnum;++i)
{if (G.vertices[i].data==m)
return i;
}
return -1;
}
void InsertArc(ALGraph &G,int m,int n) //无向图增加边
{ArcNode *p=new ArcNode; //两个边节点
int i,j;
i=alocatedvex(G,m); //查找m、n所在的位置
j=alocatedvex(G,n);
p->adjvex=j; //头插法
p->nextarc=G.vertices[i].firstarc;
G.vertices[i].firstarc=p;
ArcNode *p2=new ArcNode;
p2->adjvex=i;
p2->nextarc=G.vertices[j].firstarc;
G.vertices[j].firstarc=p2;
G.arcnum+=1;
}
void DeleteArc(ALGraph &G,int m,int n)//删除边
{int i,j;
ArcNode *p,*p2;
i=alocatedvex(G,m); //查找m、n所在的位置
j=alocatedvex(G,n);
p2=G.vertices[i].firstarc;
if(p2->adjvex==j) //如果第一个边就是要删除的边
{G.vertices[i].firstarc=p2->nextarc;
delete p2;
}
else
{for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc) //若第一个边节点不是要删除的边
{if(j==p->adjvex)
{p2->nextarc=p->nextarc;
delete p;
}
}
p2=G.vertices[j].firstarc;
if(p2->adjvex==i) //如果第一个边就是要删除的边
{G.vertices[j].firstarc=p2->nextarc;
delete p2;
}
else
{for(p=G.vertices[j].firstarc;p!=NULL;p=p->nextarc) //若第一个边节点不是要删除的边
{if(i==p->adjvex)
{p2->nextarc=p->nextarc;
delete p;
}
}
}
}
}
int main()
{
printf("\n以下为邻接表\n");
ALGraph G1;
printf("加入顶点0、1、2、3、4\n");
int m=5;
for(int j=0;j<5;j++)
InsertVex(G1,j);
printf("加入边01,02,03,14\n");
InsertArc(G1,0,1);
InsertArc(G1,0,2);
InsertArc(G1,0,3);
InsertArc(G1,1,4);
printf("删除边01");
DeleteArc(G1,0,1);
printf("输出边");
for(int i=0;i<G1.vexnum;i++)
{ArcNode *p;
for(p=G1.vertices[i].firstarc;p!=NULL;p=p->nextarc)
printf("%d%d ",i,p->adjvex);
}
return 0;
}