麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

SPFA算法

2019-11-14 08:53:51
字體:
來源:轉載
供稿:網友
/*由于Bellman-Ford算法的每輪操作都需要操作所有的邊,顯然這其中會有大量無意義的操作,嚴重影響了算法的性能。于是注意到,只有當某個頂點u的d[u]值改變時,從它出發的邊的鄰接點v的d[v]值才有可能改變。由此可以進行一個優化:建立一個隊列,每次將隊首頂點取出,然后對從u出發的所有邊u->v進行松弛操作,也就是判斷d[u]+length[u->v]<d[v]是否成立,如果成立,則用d[u]+length[u->v]覆蓋d[v],于是d[v]獲得更優的值,此時如果v不在隊列中,就把v加入隊列。這樣操作直到隊列為空(說明圖中沒有從源點可達的負環),或某個頂點的入隊次數超過V-1(說明圖中存在從原點可達的負環)。以下是偽代碼:queue<int> Q;源點s入隊;while(隊列非空){	取出隊首元素u;	for(u的所有鄰接邊u->v)	{		if(d[u]+dis<d[v])		{			d[v] = d[u] + dis;			if(v當前不在隊列)			{				v入隊;				if(v入隊次數大于n-1)				{					說明有可達負環,return;				}			}		}	}}這種優化后的算法被稱為SPFA(Shortest Path Faster Algorithm),期望時間復雜度為O(kE),k為常數,很多情況下不超過2,經常性優于堆優化的Dijkstra算法。若原圖中存在從源點可達的負環則SPFA的時間復雜度會退化成O(VE)。*///下面是鄰接表形式的圖的SPFA代碼#include<vector>#include<queue>#include<algorithm>using namespace std;const int MAXV = 1000;const int INF = 1000000000;struct Node{	int v, dis;};vector<Node> Adj[MAXV];//圖G的鄰接表int n, d[MAXV], num[MAXV];//num數組記錄頂點的入隊次數bool inq[MAXV];//頂點是否在隊列中bool SPFA(int s){	//初始化部分	memset(inq, false, sizeof(inq));	memset(num, 0, sizeof(num));	fill(d, d + MAXV, INF);	//源點入隊部分	queue<int>Q;	Q.push(s);//源點入隊	inq[s] = true;//源點已入隊	num[s]++;//源點入隊次數加1	d[s] = 0;//源點的d值為0	//主體部分	while (!Q.empty())	{		int u = Q.front();//隊首頂點編號為u		Q.pop();//出隊		inq[u] = false;//設置u為不在隊列中		//遍歷u的所有鄰接邊v		for (int j = 0; j < Adj[u].size(); j++)		{			int v = Adj[u][j].v;			int dis = Adj[u][j].dis;			//松弛操作			if(d[u]+dis<d[v])			{				d[v] = d[u] + dis;				if (!inq[v])//如果v不在隊列中				{					Q.push(v);//v入隊					inq[v] = true;//設置v為在隊列中					num[v]++;//v的入隊次數加1					if (num[v] >= n) return false;//有可達負環				}			}		}	}	return true;//無可達環}/*注意上述SPFA代碼是BFS版本,當然也可以將隊列換成棧以實現DFS版本的SPFA,對判環有奇效。還有,可以將隊列換成優先隊列以加快速度。當然還可以換成deque(雙端隊列),使用SLF或LLL優化。SPFA算法有兩個優化算法 SLF 和 LLL: SLF:Small Label First 策略,設要加入的節點是j,隊首元素為i,若dist(j)<dist(i),則將j插入隊首,否則插入隊尾。 LLL:Large Label Last 策略,設隊首元素為i,隊列中所有dist值的平均值為x,若dist(i)>x則將i插入到隊尾,查找下一元素,直到找到某一i使得dist(i)<=x,則將i出對進行松弛操作。SLF 可使速度提高 15 ~ 20%;SLF + LLL 可提高約 50%。在實際的應用中SPFA的算法時間效率不是很穩定,為了避免最壞情況的出現,通常使用效率更加穩定的Dijkstra算法。*/
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲99 | 日韩毛片毛片久久精品 | 亚洲网站在线观看视频 | 国产精品aⅴ | 古装三级在线观看 | 日韩视频一二三 | 亚洲国产在 | 欧美女孩videos | 亚洲白嫩在线观看 | 国产成人精品午夜视频' | 56av国产精品久久久久久久 | 草莓福利视频在线观看 | 毛片福利 | 91av日韩| 鲁人人人鲁人人鲁精品 | 成人国产在线看 | 日本在线播放一区二区三区 | 欧美伦理一区二区 | 欧美日韩手机在线观看 | 中文在线观看视频 | 欧美视频国产 | 免看黄大片aa | 久久精品一区二区三区不卡牛牛 | 国产外围在线 | 在线播放av片 | 91美女视频在线观看 | 国产高潮好爽受不了了夜色 | 色视频在线 | 国产伦精品一区二区三区在线 | 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 日韩一级免费毛片 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 久久久婷婷 | 蜜桃网在线观看 | 毛片免费视频播放 | 欧美亚成人 | 在线观看免费毛片视频 | 国产精品久久久久久久久久免 | 免费在线观看成人av | 久久国产91 | 国产成人高潮免费观看精品 |