spfa 最短路径

#include <cstdio>

using namespace std;
int n,m;

int spfa_bfs(){
	int d[100] = {0};
	int c[100] = {0};
	int vis[100] = {0};
	for(int i = 0;i < n;i++){
		d[i] = INF;
	}
	d[s] = 0;
	queue<int> que;
	que.push(s);
	c[s] = 1;
	vis[s] = 1;
	while(!que.empty()){
		int u = que.front();
		que.pop();
		vis[s] = 0;
		int si = vec[u].size();
		for(int i = 0;i < si;i++){
			int v = vec[u][i];
			if(d[v] > d[u]+w[u][i]){
				d[v] = d[u]+w[u][i];

				if(!vis[v]){
					que.push(v);
					vis[v] = 1;
					c[v] ++;
					if(c[v] > n){
						return 0;
					}
				}
			}
		}
	}
	return 1;
}
int spfa_dfs(int x){
	vis[x] = 1;
	int si = vec[x].size();

	for(int i = 0;i < si;i++){
		int v = vec[x][i];
		if(d[v] > d[x] + w[x][i]){
			d[v] = d[x] + w[x][i];
			if(!vis[v]){
				if(spfa_dfs(v)){
					return 1;
				}
			}
			else{
				return 1;
			}
		}
	}
	vis[x] = 0;
	return 0;
}
int main(){
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 10:05:56

spfa 最短路径的相关文章

poj 3259Wormholes (spfa最短路径)

#include<stdio.h> #include<string.h> #include<limits.h> #include<queue> using namespace std; #define N 5505 #define M 55000//注意边和点集的数组大小 struct edge { int to,value,next; }edges[M]; int heads[N],len=0; int addedge(int u,int v,int w)

poj 3159(spfa最短路径)

Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 23152   Accepted: 6234 Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse's class a large b

hdu 1217 spfa最短路径

#include <stdio.h> #include <queue> #include <iostream> #include <map> #include <string> using namespace std; #define INF 0xfffff //因为为了辨别是否有负权,所以INF不能开太大 #define MAX 1100 float dist[MAX], pre[MAX], path[MAX][MAX]; bool sign[

SPFA 最短路径打印方法

#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <cstring> using namespace std; #define INF 0xfffffff #define maxn 40

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较(转)

几大最短路径算法比较 几个最短路径算法的比较:Floyd        求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题. Floyd-Warshall算法的时间复杂度为O(N^3),空间复杂度为O(N^2). Floyd-Warshall的原理是动态规划:设Di,j

(最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: /** *floyd算法 */ void floyd() { int i, j, k; for (k = 1; k <= n; ++k) {//遍历全部的中间点 for (i = 1; i <= n; ++i) {//遍历全部的起点 for (j = 1; j <= n; ++j) {//遍历

杭电1869-六度分离(最短路径,dijkstra,spfa,floyd)

六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6529    Accepted Submission(s): 2636 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说,大意是说,任何2个素

hdoj-1869 六度分离【最短路径--dijkstra&amp;&amp;spfa&amp;&amp;floyd】

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1869 解题思路: 转化成最短路径问题,如果两人认识,把两者之间距离看成1      如果任意两人之间隔着7个人及其以上 (即距离>7)   则不满足六度分离 spfa: #include<cstdio> #include<cstring> #include<queue> #define INF 0x3f3f3f3f #define MAXN 100+10//点数 #def