• 数据结构-图


    1、邻接矩阵

    #include <iostream>
    
    using namespace std;
    
    #define MaxSize 100
    typedef char VertexType[3];
    
    typedef struct Vertex{
        int adjvex;         //顶点编号
        VertexType data;    //顶点的信息
    }VType;
    
    typedef struct graph{
        int n,e;            //实际点数和边数
        VType vexs[MaxSize];    //顶点集合
        int edges[MaxSize][MaxSize];    //边集合
    }Graph;
    
    void Create(Graph& g){
        int b,e,w;
    
        cout << "顶点数n和边数e:";
        cin >> g.n >> g.e;
        cout << endl << "输入顶点信息:";
        for(size_t i=0;i<g.n;i++){
            cin >> g.vexs[i].data;
            g.vexs[i].adjvex = i;
        }
    
        for(size_t i=0;i<g.n;i++){
            for(size_t j=0;j<g.n;j++){
                g.edges[i][j] = 0;
            }
        }
    
        cout << endl << "输入图结构的起始点、终结点、权值:";
        for(size_t i=0;i<g.e;i++){
            cin >> b >> e >> w;
            if(w > 0 && b < g.n && e < g.n){
                g.edges[b][e] = w;
            }
            else{
                cout << "输入错误";
            }
        }
    }
    
    void DisMatrix(Graph& g){
        cout << "图的邻接矩阵:" << endl;
        for(size_t i=0;i<g.n;i++){
            for(size_t j=0;j<g.n;j++){
                cout << g.edges[i][j]<< " ";
            }
            cout << endl;
        }
    }
    
    int main(){
        Graph g;
        Create(g);
        DisMatrix(g);
        return 0;
    }

    2、邻接表

    #include <iostream>
    
    using namespace std;
    #define MaxSize 100
    
    typedef char VertexType[3];
    typedef struct endgenode{
        int adjvex; //邻接点序号
        int value;  //边的权值
        struct endgenode* next;
    }Arcnode; //顶点包含的东西
    
    typedef struct vexnode{
        VertexType data;    //节点信息
        Arcnode* first;     //头节点指针
    }VHeadnode;
    
    typedef struct{
        int n,e;    //顶点数和边数
        VHeadnode AdjList[MaxSize]; //表头节点数组
    }Graph;
    
    void Create(Graph*& g){
        int b,e,v;
        Arcnode* p;
        cout << "输入顶点数n和边数e:";
        cin >> g->n >> g->e;
        cout << endl << "输入顶点信息:";
        for(size_t i=0;i<g->n;i++){
            cin >> g->AdjList[i].data;
            g->AdjList[i].first = NULL;
        }
        cout << endl << "输入起点号、终点号、权值:";
        for(size_t i=0;i<g->e;i++){
            cin >> b >> e >> v;
            if(v > 0 && b < g->n && e < g->n){
                p = new Arcnode;
                p->adjvex = e;
                p->value = v;
                p->next = g->AdjList[b].first;
                g->AdjList[b].first = p;
            }
            else{
                cout << "error for file";
            }
        }
    
    }
    
    void DisGraph(Graph* &g){
        Arcnode* p;
        for(size_t i=0;i<g->n;i++){
            cout << "[" << i << "," << g->AdjList[i].data << "] =>";
            p = g->AdjList[i].first;
            while(p != NULL){
                cout << "(" << p->adjvex << "," << p->value << ") ->";
                p = p->next;
            }
            cout << "^" << endl;
        }
    }
    
    int main(){
        Graph *g;
        Create(g);
        DisGraph(g);
        return 0;
    }
  • 相关阅读:
    记 · 佛系青年 · 嗯我百度了下
    【CSS】452- 浏览器解析 CSS 样式的过程
    记 · 平安夜 · 平安平安平安
    【Vuejs】451- Vue CLI 首屏优化技巧
    【网站发布】前端自习课
    【CSS】450- 温故而知我不懂的CSS
    【CSS】449- CSS第四级选择器
    RabbitDemo —— Topic
    RabbitDemo —— Fanout
    RabbitDemo —— Direct
  • 原文地址:https://www.cnblogs.com/wn19910213/p/3685965.html
Copyright © 2020-2023  润新知