int cost[MAX_V][MAX_V];
int d[MAX_V];
bool used[MAX_V];
int p[MAX_V];
int in[MAX_V];
void init() {
for(int i = 0; i <= N; i++) {
cost[i][i] = 0;
for(int j = 0; j < i; j++) {
cost[i][j] = cost[j][i] = INF;
}
used[i] = false;
d[i] = INF;
p[i] = -1;
in[i] = 0;
}
}
bool spfa(int s) {
queue<int > que;
que.push(s);
used[s] = true;
d[s] = 0;
in[s]++;
while(!que.empty()) {
int u = que.front();
que.pop();
used[u] = false;
for(int v = 1; v <= N; v++) {
if(d[v] > d[u] + cost[u][v]) {
d[v] = d[u] + cost[u][v];
if(!used[v]) {
que.push(v);
used[v] = true;
in[v]++;
if(in[v] >= N)
return false;
}
}
}
}
return true;
}
spfa邻接矩阵形式
最新推荐文章于 2020-07-30 15:22:47 发布