本文共 1705 字,大约阅读时间需要 5 分钟。
由于题目给定的输入范围较小,我们可以采用静态链表的方式来解决问题。为了确保链表处理的准确性,我们需要在节点结构体中增加一个标记位,用于记录当前节点是否为有效节点。
读取输入后,我们需要注意其中可能包含不在链表中的节点。为了标记这些有效节点,我们需要对链表进行一次遍历,检查每个节点的有效性,并将其标记为有效节点。
在对节点进行排序时,我们需要遵循以下规则:
通过对链表进行一次遍历,我们可以标记所有有效节点。具体实现步骤如下:
cnt,用于记录有效节点的数量。cnt。使用自定义的比较函数对节点列表进行排序。比较函数的逻辑如下:
#include#include #include #include using namespace std;struct NODE { int ad = -1; int next = -1; int num; int flag = -1; // 标记是否为有效节点};bool cmp(const NODE& n1, const NODE& n2) { if (n1.flag != n2.flag) { return n1.flag > n2.flag; } else { return n1.num < n2.num; }}int main() { int ad, n; cin >> ad >> n; vector nodes(maxn); for (int i = 0; i < n; ++i) { int a1, a2; int num; cin >> a1 >> a2 >> num; nodes[a1].ad = a1; nodes[a1].num = num; nodes[a1].next = a2; } int p = ad; int cnt = 0; while (p != -1) { nodes[p].flag = 1; cnt++; p = nodes[p].next; } sort(nodes.begin(), nodes.end(), cmp); if (nodes[0].ad != -1) { printf("%d %05d\n", cnt, nodes[0].ad); } else { printf("%d %d\n", cnt, nodes[0].ad); } for (int i = 0; i < maxn; ++i) { if (i > 0) { cout << endl; } if (nodes[i].flag == 1) { cout << nodes[i].ad << " " << setw(5) << nodes[i].num; } }}
%d格式输出。%05d格式输出,以便于对齐。%d格式输出。通过以上实现,我们可以高效地解决链表查找问题,并确保输出格式符合要求。
转载地址:http://ziyg.baihongyu.com/