就是给一个图。假设随意两点之间的距离都不超过7则输出Yes,否则 输出No。 因为之前没写过spfa,无聊的试了一下。 大概说下我对spfa实现的理解。 因为它是bellmanford的优化。 所以之前会bf的理解起来,可能会比較easy。 它是这样子的,你弄一个队列。 先打一个起点进去。之后求出的到各点的最短路。 都是由这个点出发的。 然后開始迭代,直至队列为空。 在迭代的过程中, 首先从队列里面拿一个点出来, 然后标记一下,说明这个点不在队列里面。 然后開始枚举全部点。进行松弛化, 松弛化的过程就是看以这个拿出来的点为转折点, 枚举的其他点为终点,看有没有更好的方法 让路径变短。 假设有的话,推断那个点在不在队列中。 假设不在。 就把枚举出的那个点。拿到 队列中去。记得标记一下说明这个点已经在队列中了。 就是这样了。 代码例如以下:
qq; memset(iq,0,sizeof(iq)); memset(weight,127,sizeof(weight)); iq[st]=1; qq.push(st); weight[st]=0; while(qq.size()) { x=qq.front(); qq.pop(); iq[x]=0; for(i=0;i #include#include #include using namespace std;int num_dot,num_side,iq[110],weight[110],dis[110][110];void init(){ int i,t1,t2; memset(dis,127,sizeof(dis)); for(i=0;i