数据结构之邻接矩阵存图 发表于 2019-05-06 | 更新于 2019-05-20 | 分类于 数据结构 | 阅读次数: 本身邻接矩阵就是一个简单的二维数组,但是考虑到顶点的下标标号可能不是从1开始到的N结束的。所以用如下算法。当然你也可以离散化一下坐标再普通存图 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;typedef struct Matrix{ int vertex[101]; int M[101][101];}Graph;int locate(Graph G, int x,int n){ for(int i = 1; i <= n; ++i) { if(G.vertex[i] == x) { return i; } }}void create(Graph &G,int n,int arcnum){ int a,b,w; for(int i = 1; i <= n; ++i) { cin >> G.vertex[i]; } for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) if(i != j) G.M[i][j] = G.M[j][i] = inf; for(int i = 1; i <= arcnum; ++i) { cin >> a >> b >> w; int A = locate(G,a,n); int B = locate(G,b,n); G.M[A][B] = G.M[B][A] = w; }}int main(){ Graph G; int n,arcnum; cin >> n; cin >> arcnum; create(G, n, arcnum); for(int i = 1; i <= n; ++i) { for(int j = 1; j <= n ; ++j) { printf("%d%c",G.M[i][j],j==n?'\n':' '); } }} 打赏