国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Floyd算法 有向圖。

2019-11-08 18:43:37
字體:
來源:轉載
供稿:網友

Floyd算法求所有點之間的最短路 可以有負權值  時間復雜度O(n^3)

用的是鄰接矩陣

從 i 到 j 兩個點之間。。假設最短路徑是 D i j  如果從i到中間任意點k   D i k +D k j這個距離小于了假設的這個D ij 那就把Di j 替換為D i k+D k j

用三個for

第一個 每一個點都要把所有點當做一次k點 進行剛剛說的比較

第二個 代表 i 開始的點

第三個 代表 j 結束的點  i j 就遍歷了所有點

 for (int k = 1; k <= n; k++)       for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++){if (edge[i][k] + edge[k][j] < edge[i][j])edge[i][j] = edge[i][k] + edge[k][j] ; //對于所有i j 都處理一次 完了edge[i][j]存儲的就是兩點之間的最短路了}

貼個用過的完整馬。就水數據跑了一下

#include <iostream>using namespace std;struct Graph{	char v[555];	int  edge[555][555];	int n, e;};class A{public:	explicit A(int m,int n);	~A();	void Floyd();PRivate:	Graph *G;};A::A(int m, int num){	G = new Graph;	G->n = m;	G->e = num;		for (int i = 0; i < G->n;i++)	{				cout << "Input a char as Node/n";		char a;		cin >> a;		G->v[i] = a;			}	for (int i = 0; i <= G->n; i++)	{				for (int j = 0; j <= G->n; j++)			G->edge[i][j] = 9999999;		G->edge[i][i] = 0;	}	for (int i = 0; i < G->e; i++)	{		cout << "Input i j w/n";		int egi;		int egj;		int w;		cin >> egi >> egj >> w;		G->edge[egi][egj] = w;			}	}A::~A(){	delete G;}void A::Floyd(){	for (int k = 1; k <= G->n; k++)		for (int i = 1; i <= G->n; i++)			for (int j = 1; j <= G->n; j++)			{				if (G->edge[i][k] + G->edge[k][j] < G->edge[i][j])					G->edge[i][j] = G->edge[i][k] + G->edge[k][j];			}	cout << G->edge[1][2] << endl;	cout << G->edge[1][3] << endl;	cout << G->edge[2][3] << endl;	}
#include "h.h"int main(){	A a(3, 5);	a.Floyd();	system("pause");}簡單測試。

嗯 就醬紫


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林周县| 柞水县| 临沧市| 湄潭县| 灵宝市| 南开区| 沛县| 铅山县| 固安县| 长岛县| 汾阳市| 逊克县| 元氏县| 梁河县| 乐山市| 临夏市| 双流县| 乐安县| 合水县| 德州市| 嘉义县| 石首市| 静宁县| 南康市| 贵州省| 吉木萨尔县| 郓城县| 华容县| 太白县| 柞水县| 济南市| 长兴县| 绥滨县| 礼泉县| 怀宁县| 个旧市| 五寨县| 晴隆县| 府谷县| 大渡口区| 屏边|