-tthappy 2023-04-15 15:57 采纳率: 55.6%
浏览 15

关于无向图以邻接表加入边问题

我的报错全是这样子,不是很能明白这样哪里错了?对照书本的也是这样写,这个插入边的算法到底哪里有问题呢?请帮我看看我的InsertArc函数里面的问题,因为报错全都是这样子的。谢谢!困惑了好几天了诶

img

#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; 
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-17 05:16
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已采纳回答 4月15日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)