摘自:
floyd演算法是多源最短路演算法,複雜度最高(n ^ 3),通常用在點比較少的起點不固定的問題中。能解決負邊(負權)但不能解決負環。
dijkstra演算法是單源最短路演算法,最常用時間複雜度(n ^ 2)優化後可以達到(nlogn),不能解決負邊問題,稀疏圖需要耗費比較多的空間。
spfa演算法適合稀疏圖,可以解決帶有負權邊,負環的問題,但是在稠密圖中效率比dijkstra要低。
一. floyd
#define max 65535
int chara[n][n], p[n][n];//n為點的可能最多值
int n, m;//n個點,m條路
void floyd()
} for (int k = 0; k < n; k++)
}} }
}//a點到b點距離最短為chara[a][b]
int main()
;vectormp[n]; //儲存邊;
void spfa(int src)//src為起點
cin >> s >> t;
spfa(s);
printf("%d\n", dis[t] == inf ? -1 : dis[t]);//輸出
for (int i = 0; i < n; i++)//初始化
mp[i].clear();
} return 0;
}
最短路模板
1.dijkstra演算法 演算法思想 從某乙個點開始,找與它距離最近的乙個點,然後更新所有點到這條路徑的距離,然後再次選取乙個距離上乙個點路徑最短的點,將其加入路徑,以此進行,直到求出起點到所有點的最短距離.注意 權值不能為負,如圖 1到3的距離應該是零,但這裡結果為一 1 鄰接矩陣 複雜度 o ...
最短路模板
週六週日tyvj上有模擬賽 順便逃了周練 霧 複習了一下圖論裡的基本演算法 彷彿第一次寫最短路的手生 寫的太少了 orz dijkstra include define maxn 10001 define maxm 300001 using namespace std template void r...
最短路模板
include include include include include include define inf 0x3f3f3f3f using namespace std const int maxn 105 int dis maxn pre maxn struct edge 邊 edge ...