隣接するテーブルから頂点とそれに関連するエッジを削除

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<