隣接するテーブルから頂点とそれに関連するエッジを削除
2377 ワード
, , , :
/*
*
* +
*/
map mmp;//
struct ArcNode//
{
string name;
int wigth;
ArcNode* next;
};
struct VertexNode//
{
string name;//
ArcNode* firstarc;//
};
class Graph
{
private:
int pointnum,eagenum;
VertexNode point[maxn];//
ArcNode* last[maxn];//
int vis[maxn];//
int dis[maxn];//
void insertElement(int pos, ArcNode * p);
void sortlist(VertexNode nil);
public:
Graph();//
void create(int pointnum,int eagenum);
void initvis();
void get_agree();//
void dfs(string begin,int flag);//
void bfs(string begin);//
void dfs_all(string begin);
void sort();
void bfs_all(string begin);
int get_connected_num();//
bool is_connected();//
bool is_exit(string str);//
void delete_point(string str);
void Dijkstra(string begin);
void Prim();
void Kruskal();
//TODO: ,
void print();
};
void Graph::delete_point(string str)
{
if(pointnum==0)
{
printf("don't have the graph
");
return;
}
if(is_exit(str))
{
int position = -1; //
ArcNode *p, *q, *r;
p = point[mmp[str]].firstarc;
for(int i=mmp[str]+1; inext;
delete p;
p = q;
}
//
for(int i=0; iname)==0)
{
if(p==point[i].firstarc)
{
point[i].firstarc=p->next;
}
else
{
r->next=p->next;
}
q=p;
p=p->next;
delete q;
}
else
{
r=p;
p=p->next;
}
}
}
cout<