有向图邻接矩阵、无向图邻接矩阵 #include<iostream> using namespace std; #define MaxInt 32767 #define MVNum 100 bool visited[MVNum]; typedef struct { char vexs[MVNum]; int arcs[MVNum][MVNum]; int vexnum, arcnum; }AMGraph; typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; //OtherInfo info; }ArcNode; typedef struct VNode { int data; ArcNode *firstarc; }VNode, AdjList[MVNum]; typedef struct { AdjList vertices; int vexnum, arcnum; }ALGraph; int LocateVex(AMGraph &G, char v) { int n; for (int i = 0; i<G.vexnum; i++) if (G.vexs[i] == v) n = i; return n; } int LocateVex(ALGraph &G, int v) { int n = 0; for (int i = 0; i<G.vexnum; i++) if (G.vertices[i].data == v) n = i; return n; } //邻接矩阵创建无向图和有向图 int CreateWXT(AMGraph &G) { char v1, v2; int w, i, j; cout<<"无向图邻接矩阵的建立"<<endl; cout << "请输入顶点数和边数:"; cin >> G.vexnum; cin >> G.arcnum; for (i = 0; i<G.vexnum; i++) { cout << "请输入顶点V" << (i + 1) << "的序号:"; cin >> G.vexs[i]; } for (i = 0; i<G.vexnum; i++) for (j = 0; j<G.vexnum; j++) G.arcs[i][j] = 0; for (int k = 0; k<G.arcnum; k++) { cout << "请输入两点之间的权值:例如1 2 10 "; cin >> v1; cin >> v2; cin >> w; i = LocateVex(G, v1); j = LocateVex(G, v2); G.arcs[i][j] = w; G.arcs[j][i] = G.arcs[i][j]; } cout << "无向图的邻接矩阵为:" << endl; for (i = 0; i<G.vexnum; i++) { for (j = 0; j<G.vexnum; j++) cout << G.arcs[i][j] << " "; cout << endl; } return 1; } int CreateYXT(AMGraph &G) { char v1, v2; int w, i, j; cout << "有向图邻接矩阵的建立:"<<endl; cout << "请输入顶点数和边数:"; cin >> G.vexnum; cin >> G.arcnum; for (i = 0; i<G.vexnum; i++) { cout << "请输入顶点V" << (i + 1) << "的序号:";; cin >> G.vexs[i]; } for (i = 0; i<G.vexnum; i++) for (j = 0; j<G.vexnum; j++) G.arcs[i][j] = MaxInt; for (int k = 0; k<G.arcnum; k++) { cout << "请输入两个顶点值以及两点之间的权值:"; cin >> v1; cin >> v2; cin >> w; i = LocateVex(G, v1); j = LocateVex(G, v2); G.arcs[i][j] = w; } cout << "有向图的邻接矩阵为:" << endl; for (i = 0; i<G.vexnum; i++) { for (j = 0; j<G.vexnum; j++) { if (G.arcs[i][j] != MaxInt) cout << G.arcs[i][j] << " "; else cout << "∞" << " "; } cout << endl; } return 1; } int main() { AMGraph G1, G2; CreateWXT(G1); CreateYXT(G2); }