zoukankan      html  css  js  c++  java
  • 邻接表

    //有向图的邻接表实现
    #include<iostream>
    using namespace std;
    
    struct ENode//定义弧的结构体 
    {
        int adjvex;//某弧所指向顶点的下标
        ENode* next;//指向下一条弧
        int weight; //弧上的权重 
     };
     
     struct VNode{//顶点的结构体类型 
         char data;//顶点信息 
         ENode* first ;//指向第一条依附该顶点的弧 
     };
     
     struct ALGraph{//图的邻接表 
         VNode *V;//顶点数组 
         int vexnum;//顶点数 
         void InitG(int num);//初始化 
         void InsertArc(int from,int to,int weight);//插入弧 
         void DeleteArc(int from,int to);//删除弧 
         void Traverse();//逐个顶点输出各边 
     };
     
     
     int main(){
         ALGraph g;
         int n,m,w;
         char a,b; 
         
         cin>>n>>m;//顶点数n,边数m 
         g.InitG(n);//简历一个n个顶点的链接表 
         
         for(int i=0;i<m;i++)//数据域输进去,指针域置为空指针 
         {
             cin>>a>>b>>w;//a到b有边权值是w 
             g.InsertArc(a-'a',b-'a',w);//字符转化为对应的下标 
             //g.insertArc(b-'a',a-'a',w);//无向图增加此句 
         }
         g.Traverse();
         
         cin>>a>>b;
         g.DeleteArc(a-'a',b-'a');
         // g.DeleteArc(a-'a',b-'a',w);//无向图增加此句 
        g.Traverse();
        
        return 0;
     } 
     
     
     void ALGraph::InitG(int num)//初始化一个顶点总数为num的图 
     {
         vexnum=num;
         V=new VNode[vexnum];//申请一个vexnum这么大的数组由V来指向 
         for(int i=0;i<vexnum;i++)
         {
             V[i].first=NULL;//first指针域设为空指针 
             cin>>V[i].data;//输入数据域 
         }
     }
     
     void ALGraph::InsertArc(int from,int to,int weight)//起点,终点,权值 
     {
         ENode *s=new ENode;
         s->adjvex=to;//s对应的链接点下标设为to 
         s->weight=weight;
         s->next=V[from].first;//新节点s插到链表vertices[v] 的头 
         V[from].first=s;
     }
     
     void ALGraph::DeleteArc(int from,int to)//将弧<from,to>从图中删除 
     {
         ENode *p=V[from].first,*q=p;//还是节点的操作 
         while(p!=NULL)
         {
             if(p->adjvex==to) break;
             q=p;
             p=p->next;
         }
         if(q==p) V[from].first=p->next;
         else q->next=p->next;
         delete p;
     }
     
     void ALGraph::Traverse(){
     for(int i=0;i<vexnum;i++)
     {
         ENode *p=V[i].first;
         while(p!=NULL){//当链表还没结束时,将链表输出来 
             cout<<V[i].data<<"-->";
             cout<<V[p->adjvex].data<<endl;
             p=p->next;
         }
     }
     } 
     
     
  • 相关阅读:
    房价
    Jsrender初体验
    GCD XOR UVA
    GCD
    Aladdin and the Flying Carpet LightOJ
    HDU6035 2017多校第一场1003 树形DP
    F
    C
    B
    An Easy Physics Problem HDU
  • 原文地址:https://www.cnblogs.com/ilovetheworld/p/10835749.html
Copyright © 2011-2022 走看看