Gráfico de matriz de adyacencia y lista de adyacencia (implementación de c ++)

Realización de estructura gráfica

Matriz de adyacencia

#define maxsize 20
typedef char Vertex;
typedef int Edge;
typedef struct{
    
    
    Vertex vexs[maxsize];
    Edge edges[maxsize][maxsize];
    int vnums,enums;
}MGraph;

void Create_MGraph(MGraph *G){
    
              //创建有向图的邻接矩阵存储
    cout<<"请输入点数和边数:"<<endl;
    cin>>G->vnums>>G->enums;
    for(int i=0;i<G->vnums;++i){
    
            //输入顶点信息,建立顶点表
        cin>>G->vexs[i];
    }
    for(int i=0;i<G->vnums;++i){
    
            //初始化邻接矩阵
        for(int j=0;j<G->vnums;++j)
            G->edges[i][j]=0;
    }
    for(int i=0;i<G->enums;++i){
    
    
        int m,n;
        cout<<"请输入边的两个顶点:";
        cin>>m>>n;
        G->edges[m][n]=1;
        //G->edges[n][m]=1;    若为无向图则加上这条
    }
}

Lista de adyacencia

typedef struct node{
    
    
    int adjvex;         //邻接点域
    node *next;         //指向下一个邻接点或边的指针域
}EdgeNode;

typedef struct vnode{
    
    
    Vertex vertex;
    EdgeNode *firstedge;
}VertexNode;

typedef struct{
    
    
    VertexNode AdjList[maxsize];
    int vnums,enums;
}ALGraph;

void Create_ALGraph(ALGraph *G){
    
        //创建有向邻接表        
    cout<<"请输入顶点数和边数:"<<endl;
    cin>>G->vnums>>G->enums;
    for(int i=0;i<G->vnums;++i)
        G->AdjList[i].firstedge=nullptr;  //初始化为空
     for(int k=0;k<G->enums;++k){
    
    
         int i,j;
         cin>>i>>j;                 //输入边的两个顶点
         EdgeNode *s=(EdgeNode*)malloc(sizeof(EdgeNode));
         s->adjvex=j;               
         s->next=G->AdjList[i].firstedge;
         G->AdjList[i].firstedge=s;
     }
}

Supongo que te gusta

Origin blog.csdn.net/qq_43477024/article/details/109823733
Recomendado
Clasificación