•  有向图和无向图

     以邻接矩阵显示

    Status CreateUDG(AMGraph &G)
    {//无向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入边数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条边:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
            G.arcs[j][i] = G.arcs[i][j];
        }
        return OK;
    }
    Status CreateDG(AMGraph &G)
    {//有向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入弧数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条弧:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
        }
        return OK;
    }

    我的程序:

    #include <iostream>
    using namespace std;
    
    #define OK 1
    #define MVNum 100
    typedef int Status;
    typedef char VerTexType;
    typedef int ArcType;
    typedef struct
    {
        VerTexType vexs[MVNum];
        ArcType arcs[MVNum][MVNum];
        int vexnum, arcnum;
    }AMGraph;
    
    int LocateVex(AMGraph G, VerTexType u)
    {
        int i;
        for (i = 0; i < G.vexnum; ++i)
            if (u == G.vexs[i])
                return i;
        return -1;
    }
    
    Status CreateUDG(AMGraph &G)
    {//无向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入边数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条边:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
            G.arcs[j][i] = G.arcs[i][j];
        }
        return OK;
    }
    
    Status CreateDG(AMGraph &G)
    {//有向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入弧数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条弧:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
        }
        return OK;
    }
    
    void DisplayAM(AMGraph G)
    {
        for (int i = 0; i < G.vexnum; i++)
        {
            for (int j = 0; j < G.vexnum; j++)
                cout << G.arcs[i][j] << "  ";
            cout << "
    ";
        }
    }
    
    int main()
    {
        cout << "创建邻接矩阵,请选择创建有向图还是无向图:(1)有向图 (2)无向图
    ";
        int opter;
        AMGraph G;
        cin >> opter;
        if (opter == 1) 
        {
            CreateDG(G);
            DisplayAM(G);
        }
        else if (opter == 2)
        {
            CreateUDG(G);
            DisplayAM(G);
        }
    
    }
    #include <iostream>
    using namespace std;
    
    #define OK 1
    #define MVNum 100
    typedef int Status;
    typedef char VerTexType;
    typedef int ArcType;
    typedef struct
    {
        VerTexType vexs[MVNum];
        ArcType arcs[MVNum][MVNum];
        int vexnum, arcnum;
    }AMGraph;
    
    int LocateVex(AMGraph G, VerTexType u)
    {
        int i;
        for (i = 0; i < G.vexnum; ++i)
            if (u == G.vexs[i])
                return i;
        return -1;
    }
    
    Status CreateUDG(AMGraph &G)
    {//无向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入边数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条边:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
            G.arcs[j][i] = G.arcs[i][j];
        }
        return OK;
    }
    
    Status CreateDG(AMGraph &G)
    {//有向图
        cout << "请输入顶点数:";
        cin >> G.vexnum;
        cout << "请输入弧数:";
        cin >> G.arcnum;
        cout << "请依次输入各顶点:";
        for (int i = 0; i < G.vexnum; ++i)
            cin >> G.vexs[i];
        cout << "请输入各条弧:";
        for (int i = 0; i < G.vexnum; i++)
            for (int j = 0; j < G.vexnum; ++j)
                G.arcs[i][j] = 0;
        for (int k = 0; k < G.arcnum; ++k)
        {
            VerTexType v1, v2;
            cin >> v1 >> v2;
            int i = LocateVex(G, v1);
            int j = LocateVex(G, v2);
            G.arcs[i][j] = 1;
        }
        return OK;
    }
    
    void DisplayAM(AMGraph G)
    {
        for (int i = 0; i < G.vexnum; i++)
        {
            for (int j = 0; j < G.vexnum; j++)
                cout << G.arcs[i][j] << "  ";
            cout << "
    ";
        }
    }
    
    int main()
    {
        cout << "创建邻接矩阵,请选择创建有向图还是无向图:(1)有向图 (2)无向图
    ";
        int opter;
        AMGraph G;
        cin >> opter;
        if (opter == 1) 
        {
            CreateDG(G);
            DisplayAM(G);
        }
        else if (opter == 2)
        {
            CreateUDG(G);
            DisplayAM(G);
        }
    
    }

  • 相关阅读:
    axios
    es6
    $route监听路由变化
    容易挂
    自定义全局组件/插件
    eslintrc.js
    dev-server.js
    webpack-dev-server.js
    怎么消除间隔间的空白字符
    es6语法
  • 原文地址:https://www.cnblogs.com/cjwen/p/11177616.html
Copyright © 2020-2023  润新知