有向图和无向图
以邻接矩阵显示
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); } }