1. 程式人生 > 其它 >第二類最短路徑 每一對頂點之間的最短路徑 弗洛伊德演算法

第二類最短路徑 每一對頂點之間的最短路徑 弗洛伊德演算法

技術標籤:資料結構演算法圖論

在這裡插入圖片描述

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct{
int vexs[10];
int arcs[10][10];
int vnum;
}MGraph;
int path[100][100];
int d[100][100];

void  creatAdjmatrix(MGraph &g){
int n,i,j;
cin>>n;
g.vnum=n;
for(i=0;i<n;i++){
    g.vexs[i]=i;
     for
(j=0;j<n;j++){ g.arcs[i][j]=100; if(i==j) g.arcs[i][j]=0; } } cin>>i>>j>>n; while(i!=-1&&j!=-1){ g.arcs[i][j]=n; cin>>i>>j>>n; } } void ShortestPath_Floyd(MGraph g){ for(int i=0;i<g.vnum;i++){ for(int j=0;j<g.vnum;j++){ d[
i][j]=g.arcs[i][j]; if(g.arcs[i][j]!=1000&&i!=j)path[i][j]=i; else path[i][j]=-1; } } for(int k=0;k<g.vnum;k++) for(int i=0;i<g.vnum;i++) for(int j=0;j<g.vnum;j++){ if(d[i][k]+d[k][j]<d[i][j]
){ d[i][j]=d[i][k]+d[k][j]; path[i][j]=path[k][j]; } } } int main() { MGraph g; creatAdjmatrix(g);//4 0 1 1 0 3 4 1 2 9 1 3 2 2 0 3 2 1 5 2 3 8 3 2 6 -1 -1 -1 //6 0 2 10 0 4 30 0 5 100 1 2 5 2 3 50 3 5 10 4 3 20 4 5 60 -1 -1 -1 ShortestPath_Floyd(g); for(int i=0;i<g.vnum;i++){ for(int j=0;j<g.vnum;j++){ printf("%4d ",d[i][j]); //cout<<d[i][j]<<" "; if(j==g.vnum-1) cout<<endl; } } return 0; }