#include <stdio.h>
#include "graph.h" //请勿删除,否则检查不通过
#include<stdlib.h>
bool del_vertex(ListGraph* G, VertexType v)
{
int a;
a=locate_vertex(G,v);
if(a==-1)return false;
while(G->vertex[a].firstarc){
ArcNode* p=G->vertex[a].firstarc;
if(p->nextarc){
ArcNode* temp=p->nextarc;
p->nextarc=temp->nextarc;
free(temp);
}
else{
free(p);
G->vertex[a].firstarc=null;
}G->vexnum--;
}G->arcnum--;//先把V为头的节点全部删掉
//再将辅助数组里面的元素往前移
for(int i=a;i<G->vexnum;i++){
G->vertex[i]=G->vertex[i+1]
}
//再将每一个指向V的节点删除
for(int i=0;i<G->vexnum;i++){
ArcNode* p=G->vertex[i].firstarc;
ArcNode* pre=null;ArcNode* temp;
while(p){
if(p->adjvex==v){
if(pre==NULL)//p是头节点{
temp=p;G->vertex[i].firstarc=p->nextarc;
}else{temp=p;pre->nextarc=p->nextarc;}
}
free(temp);
p=p->nextarc;
G->vexnum--;
else{pre=p;p=p->nextarc;
}
}
}
}