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 這段 的思想就是 最開...