#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
构建函数
void build_Adj_List(vector<vector<pair<int, int>>> &adjList, vector<string> &node, int num, int edges) {
// adjList邻接表,node节点名称,num节点个数,edges边的个数
// 存储节点名字
for (int i = 0; i < num; i++) {
cin >> node[i];
}
// 存储边
for (int i = 0; i < edges; i++) {
string start, end;
int weight;
cin >> start >> end >> weight;
int from = -1;
int to = -1;
for (int j = 0; j < num; j++) {
if (start == node[j]) from = j;
if (end == node[j]) to = j;
}
if (from != -1 and to != -1) {
// 存储指向的节点下标以及路径权重
pair<int, int> p(to, weight);
// 向from节点下标的数组中插入键值对,键为to节点下标,值为路径权重
adjList[from].push_back(p);
}
}
}
打印函数
void print_Adj_List(vector<vector<pair<int, int>>> & adjList, vector<string> &node) {
for (int i = 0; i < node.size(); i++) {
if (!adjList[i].empty()) {
cout << "from " << node[i] << " ";
for (int j = 0; j < adjList[i].size(); j++) {
if (j != 0) {
cout << "from " << node[i] << " ";
}
cout << "to " << node[adjList[i][j].first] << " "
<< "weight " << adjList[i][j].second << endl;
}
}
}
}
主函数
int main_adj_list() {
int num;
cin >> num;
vector<string> node(num);
vector<vector<pair<int, int>>> adjList(num);
int edges;
cin >> edges;
build_Adj_List(adjList, node, num, edges);
print_Adj_List(adjList, node);
return 0;
}