本程序使用了几个全局变量。
我们在代码中使用了一个全局FIFOQUEUE,使用宏定义部分操作。
//队列 FIFO_Q
QETYPE queue[QMAX];
int qs,qe;//队列中的元素开闭,默认为0
#define qInitQueue() memset(queue,-1,MAXN);qs=-1;qe=0;
#define qToItem(x) queue[++qs]=x;
#define qFromItem() queue[qe++]
#define qOver() (((qs)<(qe)) ?(1) :(0))
其中,QETYPE需要自己用#define来定义。QMAX也需要。
这个FIFO_Q为简单版本,节省时间但是浪费内存资源,适合于入队次数较少或平均队列内比(在队列内的元素/可能进入队列的总元素)较大的情况。
至于优化版本,以后再提。
以下是全部代码,没有做具体优化。
//
// SPFA算法
// 使用邻接矩阵
//
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <memory.h>
#define MAXN 10000
#define OO 214748364
#define QETYPE int
#define QMAX 20000
using namespace std;
typedef struct
{
int s;
int e;
int w;
} EDGE;
//队列 FIFO_Q
QETYPE queue[QMAX];
int