有向图和无向图

 以邻接矩阵显示

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

}

原文地址:https://www.cnblogs.com/cjwen/p/11177616.html