求助各位高手关于数据结构(C语言版)的问题!不胜感激!!

2025-04-28 05:00:48
推荐回答(2个)
回答1:

给你个dijkstra算法模板吧……
struct node{
int v, d;
friend bool operator < (node n1, node n2)
{
return n1.d > n2.d;
}
node(int a, int b)
{
v = a, d = b;
}
};
priority_queue q;
void dijkstra(int begin)
{
memset(use, false, sizeof(use));
memset(d, 0x7f, sizeof(d));
while (!q.empty()) q.pop();
d[begin] = 0;
q.push(node(begin, 0));
for (int i = 1; i <= n; ++i)
{
int v = q.top().v, s = q.top().d;
while (use[v])
{
q.pop();
v = q.top().v, s = q.top().d;
}
q.pop();
use[v] = true;
for (int j = p[v]; j != -1; j = e[j].next)
if (d[e[j].v] > s + e[j].d && !use[e[j].v])
{
q.push(node(e[j].v, s + e[j].d));
d[e[j].v] = s + e[j].d;
}
}
}
你这个写的我有点看不懂啊……指针据说很慢,不如用邻接表+STL堆优化……

回答2:

跟踪,死机的时候选retry,然后会停在死机的那一行代码,自己看是什么问题