最短路四種演算法模板

2021-09-26 14:09:04 字數 2153 閱讀 9243

1.floyed演算法求多源最短路

#includeusing namespace std;

const int maxn = 1e3 + 10;

#define inf 0x3f3f3f3f

int mp[maxn][maxn];//記錄圖之間的路徑

int main()

}//初始化

for(int i=0;i>a>>b>>c;

mp[a][b]=mp[b][a]=c;//無向圖

}for(int k=1;k<=n;k++)}}

cout<2.dijkstra演算法求單源最短路徑

#includeusing namespace std;

#define inf 0x3f3f3f3f

const int maxn = 1e3 +10;

int mp[maxn][maxn];//記錄圖

int vis[maxn];//記錄某個節點是否已經是最短路徑

int dis[maxn];//記錄最短路的·值

int n,m;//記錄節點數和邊數

void dijkstra()

vis[1]=1;

dis[1]=0;

for(int i=1;i<=n;i++)

}vis[idx]=1;

for(int j=1;j<=n;j++)

}}int main()

}for(int i=0;i>a>>b>>c;

mp[a][b]=mp[b][a]=c;

}dijkstra();

cout<3.bellman-ford演算法求單源最短路同時判斷負環是否存在

#includeusing namespace std;

#define inf 0x3f3f3f3f

const int maxn = 1e5 + 10 ;

struct edgeedge[maxn];

int dis[maxn];

int main()

memset(dis,inf,sizeof(dis));//初始化

dis[1]=0;//起點的dis值設定為0

for(int i=1;i<=n-1;i++)

}int flag=0;//判斷是否有負環

for(int i=1;i<=2*m;i++)

cout<4.spfa演算法

佇列實現,可以實現判負環的功能,記錄每個節點進入佇列的次數,若大於節點數,則存在負環

#includeusing namespace std;

#define inf 0x3f3f3f3f

const int maxn = 1e3 + 10;

int num[maxn][maxn];

int mp[maxn][maxn];

int dis[maxn];

int vis[maxn];

int n,m;

void spfa()}}

}}int main()

}for(int i=0;i>a>>b>>c;

num[a][0]++,num[a][num[a][0]]=b,mp[a][b]=c;

num[b][0]++,num[b][num[b][0]]=a,mp[b][a]=c;

}spfa();

cout#includeusing namespace std;

const int maxn = 1e3 + 10;

#define inf 0x3f3f3f3f

int mp[maxn][maxn];//記錄圖

int num[maxn][maxn];//記錄與某個節點所連線的節點

int vis[maxn];//記錄某個節點是否已經是最短路徑

int dis[maxn];//記錄最短路的大小

int flag;//判斷負環是否存在

int n,m;

void spfa(int idx)

}//cout<<"---=d-f=d-f=d-f=d-f=d"<>a>>b>>c;

num[a][0]++,num[a][num[a][0]]=b,mp[a][b]=c;

num[b][0]++,num[b][num[b][0]]=a,mp[b][a]=c;

}dis[1]=0;

spfa(1);

cout<

四種最短路徑演算法對比

floyd dijkstra bellman ford 佇列優化的bellman ford 空間複雜度 o n o m o m o m 時間複雜度 o n o m n logn o nm o nm 適用情況 稠密圖,和頂點關係密切 稠密圖,和頂點關係密切 稀疏圖,和邊關係密切 稀疏圖,和邊關係密切 ...

最短路徑四種演算法 總結篇

最短路 在乙個圖中有 n個點 m條邊。邊有權值,權值可正可負。邊可能是有向的,也可能是無向的。給定兩個點,起點是s,終點是t,在所有能連線s和t的路徑中尋找邊的權值之 和 最小的路徑,這就是最短路徑問題 最短路有兩種 無權圖bfs求最短路 有權圖演算法 對比 主要適用方向 時間複雜度 處理負權邊 處...

最短路的四種的求解方法 模板

floyd演算法只有五行 簡單,三個for迴圈就可以解決問題,所以它的時間複雜度為o n n n 可以求多源最短路問題。floyd演算法可以處理帶有負權邊,但不能處理帶有 負權迴路 的圖。核心 for k 1 k n k for i 1 i n i for j 1 j n j 這段 的思想就是 最開...