1. 程式人生 > >【最短路】Bellman-ford演算法

【最短路】Bellman-ford演算法

今天看啊哈演算法搞懂了Bellman-ford演算法,其實核心程式碼只有四行,還是蠻簡單的,寫了一個板子,程式碼分析容後再議

(我才不是想水部落格呢……)

#include <iostream>
#define MAXN 501
#define INF 1e7
using namespace std;
int n,m,start,end;//點數,邊數,起點,終點 
int map[MAXN][MAXN];
int vis[MAXN];
int u[MAXN],v[MAXN],w[MAXN];

void bellmanford(){
	for(int i = 0; i < n - 1; i++){//遍歷點 - 1 
		for(int j = 0; j < m; j++){//遍歷邊 
			if(vis[v[j]] > vis[u[j]] + w[j])
				vis[v[j]] = vis[u[j]] + w[j];
		}
	}
}

int main(){
	int x,y,dis;
	
	cin>>n>>m;//>>start>>end;//輸入圖的資訊 
	for(int i = 0; i < m; i++){
		cin>>u[i]>>v[i]>>w[i];
	}
	
	for(int i = 0; i < n; i++){//初始化vis陣列 
		vis[i] = INF;
	}
	vis[0] = 0;
	
	bellmanford();//放大招 
	
	for(int i = 0; i < n; i++){//輸出 
		cout<<vis[i]<<" ";
	}
	return 0;
}