算法题,逆出来大概是这样: #include <cstdlib> #include <iostream> #include <queue> #include <sstream> #include <vector> using namespace std; int key1[40] = {3, 4, 1, 1, 8, 7, 4, 5, 2, 0, 1, 1, 2, 9, 8, 1, 2, 5, 2, 7, 3, 1, 9, 6, 3, 8, 2, 5, 10, 2, 3, 7, 10, 6, 9, 8, 7, 8, 1, 0}; vector<string> tab1 = {"cnss{", "Never", "gonna", /* ... */}; struct Edge { int to; int weight; }; struct Element { // maybe 0x40 int index; vector<Edge> edges; std::string str; // other fields }; Element arr[11]; void init() { for (int i = 0; i <= 10; ++i) { arr[i].index = i; arr[i].str = tab1[i]; } for (int j = 0; j <= 38; j += 3) { int u = key1[j]; int v = key1[j + 1]; int w = key1[j + 2]; addEdge(arr[u], v, w); addEdge(arr[v], u, w); } } int main() { string input; cin >> input; stringstream ss(input); int nowEdge = 0, sum = 0; string i; bool flag = false; while (getline(ss, i, '_')) { // 查找i在tab中的位置 int index = -1; for (auto j : tab1) { index++; if (j == i) { break; } } if (index == -1) { cout << "Wrong!" << endl; return 0; } if (index) { for (auto j : arr[nowEdge].edges) { if (j.to == index) { nowEdge = j.to; sum += j.weight; flag = true; break; } } if (!flag) { cout << "Wrong!" << endl; return 0; } } } } string 24byte+ 这里用的是临接表求最短路(唯一)