1. 程式人生 > >FLoyd演算法(求最短路徑)

FLoyd演算法(求最短路徑)

【程式】

#include <stdio.h>
#define N 105
void Floyd(int D[][N],int n)//Floyd演算法 
{
	int i,j,k;
	printf("----------------------1\n");
	for(k=0;k<n;k++)
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
				D[i][j]=D[i][j]<(D[i][k]+D[k][j])?D[i][j]:(D[i][k]+D[k][j]);
}
int main()
{
	int D[N][N],n,i,j;
	printf("頂點個數:");
	scanf("%d",&n); 
	printf("頂點距離(距離在1~99,100表示無窮):\n"); 
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%d",&D[i][j]); 
	Floyd(D,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%3d",D[i][j]);
		printf("\n");
	}			
}

相關推薦

FLoyd演算法路徑

【程式】#include <stdio.h> #define N 105 void Floyd(int D[][N],int n)//Floyd演算法  { int i,j,k; pri

1003 Emergency 25 分路徑

給出N個城市,m條無向邊。每個城市中都有一定數目的救援小組,所有邊的邊權已知。現在給出起點和終點,求從起點到終點的最短路徑條數及最短經上的救緩小組數目只和。如果有多條最短路徑,則輸出數目只和最大的 Dijkstra 做法 #include<bits/stdc++.h> using nam

利用graphviz來實現無向圖視覺化路徑

1.首先下載graphviz,並安裝。 2.將輸入的邊儲存起來。 3.將最短路徑求出,並存儲每個頂點的前驅。 4.在程式中將建邊的程式碼寫入一個dot檔案中。 5.將dot檔案轉化為.png形式。 6.利用system函式開啟.png。 程式碼如下: #include &

圖解-迪傑斯特拉演算法路徑Dijkstra's Algorithm (finding shortestpaths)

轉自:http://www.mathcs.emory.edu/~cheung/Courses/171/Syllabus/11-Graph/dijkstra2.html   一. 圖解迪傑斯特拉   Before showing you the&nb

UVa 1599 理想路徑反向BFS 路徑

ack pan clu inf struct name esp turn pop 題意: 給定一個有重邊有自環的無向圖,n個點(2 <= n <= 100000), m條邊(1 <= m <= 200000), 每條邊有一個權值, 求從第一個點到n的

Dijkstra--POJ 2502 Subway出所有路徑路徑

題意: 你從家往學校趕,可以用步行和乘坐地鐵這兩種方式,步行速度為10km/h,乘坐地鐵的速度為40KM/h。輸入資料的第一行資料會給你起點和終點的x和y的座標。然後會給你數目不超過200的雙向地鐵線路的站點,你可以從一個站點乘坐地鐵到下一個站點,你可以在同一線

HPU暑期第五次積分賽 - G-迷宮BFS+路徑

題目 程式碼 #include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; int mp[110][11

HDU4370思維路徑

Problem Description Given a nn matrix Cij (1<=i,j<=n),We want to find a nn matrix Xij (1<=i,j<=n),which is 0 or 1. Besides,Xij mee

最少步數 bfs路徑

描述 這有一個迷宮,有0~8行和0~8列:  1,1,1,1,1,1,1,1,1  1,0,0,1,0,0,1,0,1  1,0,0,1,1,0,0,0,1  1,0,1,0,1,1,0,1,1  1,0,0,0,0,1,0,0,1  1,1,0,1,0,1,0,0

poj 3255 Roadblocks路徑

Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, be

次短路第二路徑

第二最短路徑 有句古話叫“不破不立”,這個思想跟次短路也就是第二最短路的思想一樣。 演算法思想:計算原圖的最短路,並儲存路徑。一一破壞最短路中的每一條邊,重新計算最短路,並排序。最小的那個就是第二最短路。 1.用dijkstra計算u->v的最短路徑,儲存路徑上的每條

路徑基本介紹(1)--Floyd演算法(多源路徑,五行程式碼)

       我們來想一想,根據我們以往的經驗,如果要讓任意兩點(例如從頂點a點到頂點b)之間的路程變短,只能引入第三個點(頂點k),並通過這個頂點k中轉即a->k->b,才可能縮短原來從頂點a點到頂點b的路程。那麼這個中轉的頂點k是1~n中的哪個點呢?甚至有時候不只通過一個點,而是經過兩個點或

歐幾里得演算法大公因子及擴充套件歐幾里得乘法逆元

一、歐幾里得演算法歐幾里得演算法又稱輾轉相除法,是指用於計算兩個正整數a,b的最大公約數。gcd(a,b)=gcd(b,a mod b)。演算法描述:1. 輸入:兩個非負整數a,b,且a≥b。2. 輸出

經典演算法Floyd演算法圖中任意一對頂點間的路徑

/************************ author's email:[email protected] date:2018.1.30 *********************

Floyd演算法路徑附程式碼例項

Floyd演算法 使用範圍: 1)求每對頂點的最短路徑; 2)有向圖、無向圖和混合圖; 演算法思想:       直接在圖的帶權鄰接矩陣中用插入頂點的方法依次遞推地構造出n個矩陣D(1), D(2), …, D(n), D(n)是圖的距離矩陣, 同時引入一個後繼

Dijkstra [迪傑斯特拉]演算法思路單點到其他每個點的各個路徑Floyd演算法:任意兩點間短距離

先給出一個無向圖 用Dijkstra演算法(迪傑斯特拉演算法)找出以A為起點的單源最短路徑步驟如下 應用Dijkstra演算法計算從源頂點1到其它頂點間最短路徑的過程列在下表中。 Dijkstra演算法的迭代過程: Floyd演算法思想: 1、從任意一條單邊路徑開

Floyd 演算法路徑

基本思想:  1,從任意一條單邊路徑開始。所有兩點之間的距離是邊的權,如果兩點之間沒有邊相連,則權為無窮大。 2,對於每一對頂點 u 和 v,看看是否存在一個頂點 w 使得從 u 到 w 再到 v 比已知的路徑更短。如果是更新它。 時間複雜度:O() 參考:弗洛伊德(Flo

無向圖的Dijkstra演算法任意一對頂點間的路徑迪傑斯特拉演算法

public class Main{ public static int dijkstra(int[][] w1,int start,int end) { boolean[] isLable = new boolean[w1[0].length];//是否標上所有的號 i

一個例子讓你明白一個演算法-Dijkstra源點到各頂點路徑

演算法思想 1.在一個圖中,把所有頂點分為兩個集合P,Q(P為最短路徑集合,Q為待選集合),用dis陣列儲存源點到各個頂點的最短路徑(到自身為0)。 2.初始化P集合,就是加入源點到該集合,並在ma

Floyd演算法與Dijkstra演算法路徑

#include <iostream> #include <cstdio> #include <vector> using namespace std; int Dis[101]; bool mark[101]; struct E { int next; i