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