zoukankan      html  css  js  c++  java
  •  有向图和无向图

     以邻接矩阵显示

    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);
        }
    
    }

  • 相关阅读:
    2015-04-10一些知识点
    2015-04-07一些知识点
    斐波那契数列算法
    进制转换算法
    Java中transient有何作用?
    RandomAccessFile的使用
    Java各种类型占用的字节数
    LineNumberReader类的使用
    PreparedStatement和Statement的区别
    ResultSet几种类型的区别
  • 原文地址:https://www.cnblogs.com/cjwen/p/11177616.html
Copyright © 2011-2022 走看看