採用鄰接矩陣表示法建立無向網

//採用鄰接矩陣表示法建立無向網
#include <iostream>
using namespace std;

#define MaInt 32767
#define MVNum 100
#define OK 1

typedef char VerTextType;
typedef int ArcType;

typedef struct {
    VerTextType Vexs[MVNum];
    ArcType arcs[MVNum][MVNum];
    int vexnum, arcnum;
}AMGrach;

int LocateVex(AMGrach G, VerTextType v) {
    for (int i = 0;i < G.vexnum;i++) {
        if (G.Vexs[i] == v)
            return i;
    }
    return -1;
}

int CreateUDN(AMGrach& G) {
    int i, j, k;
    cout << "請輸入總頂點數,總邊數,以空格隔開:";
    cin >> G.vexnum >> G.arcnum;
    cout << endl;

    cout << "輸入點的名稱,如a" << endl;
        for (i = 0;i < G.vexnum;i++) {
            cout << "input the " << i << " name";
            cin >> G.Vexs[i];
        }
    cout << endl;

    for (i = 0;i < G.vexnum;i++)
        for (j = 0;j < G.vexnum;++j)
            G.arcs[i][j] = MaInt;
    cout << "輸入邊依附的頂點及權值,如 a b 5" << endl;

    for (k = 0;k < G.arcnum;++k) {
        VerTextType v1, v2;
        ArcType w;
        cout << "input the" << (k + 1) << " side of weigth";
        cin >> v1 >> v2 >> w;
        i = LocateVex(G, v1);
        j = LocateVex(G, v2);
        G.arcs[i][j] = w;
        G.arcs[j][i] = G.arcs[i][j];
    }
    return 0;
}

int main() {
    cout << "採用鄰接矩陣表示法建立無向網";
    AMGrach G;
    int i, j;
    CreateUDN(G);
    cout << endl;
    for (i = 0;i < G.vexnum;i++) {
        for (j = 0;j < G.vexnum;++j) {

            if (j != G.vexnum - 1) {

                if (G.arcs[i][j] != MaInt) {
                    cout << G.arcs[i][j] << "\t";
                }
                else {
                    cout << "~" << "\t";
                }

            }
            else {

                if (G.arcs[i][j] != MaInt)
                    cout << G.arcs[i][j] << endl;
                else
                    cout << "~" << endl;
            }

        }
    }
    cout << endl;
    return 0;
}
相關文章
相關標籤/搜索