C++ Floyd算法

Dijkstra算法用于一个点到图中任意一点的最短路径,Floyd算法用于连通图中任意点到任意点的最短路径。Floyd从算法来看就很简单暴力,时间复杂度O(n^3),中心思想就是比如0-2不经过任何中转点是没有路径的,那么假如中转点1后,就有0-1-2这条路径,Floyd体现的就是一种动态规划,不断加入中转点,再遍历图中所有点,检查是否有经过中转点后可取得更短的路径。同样,附上邻接矩阵实现的Floyd算法


#include<iostream>  
#define MAX_VERTEX 100  
#define INFINITE 65535  
using namespace std;
//array   

char vertex_infos[MAX_VERTEX];  
int matrix[MAX_VERTEX][MAX_VERTEX];
int main(){

    for(int i=0;i<MAX_VERTEX;i++){   
        vertex_infos[i]=0;  
        for(int j=0;j<MAX_VERTEX;j++){   
            matrix[i][j]=INFINITE;   
            matrix[i][j]=INFINITE;   
        }
    }  
       
    cout<<"input vertex and side nums:";   
    int num_vertex;   
    int num_side;   
    cin>>num_vertex>>num_side;   
       
    cout<<"input vertex char data:";   
    for(int i=0;i<num_vertex;i++){   
        cin>>vertex_infos[i];   
    }   
       
    for(int i=0;i<num_side;i++){   
        int v1;   
        int v2;   
        int weight;  
        cout<<"input two vertex:";   
        cin>>v1>>v2;   
        cout<<"input weight:";   
        cin>>weight;   
        matrix[v1][v2]=weight;  
        matrix[v2][v1]=weight;  
    }
    
    for(int k=1;k<num_vertex;k++){
    	for(int i=0;i<num_vertex;i++){
	    	for(int j=0;j<num_vertex;j++){
	    		if(i!=j&&matrix[i][k]+matrix[k][j]<matrix[i][j]){
		    		matrix[i][j]=matrix[i][k]+matrix[k][j];
		    	}
	    	}
	    }
    }
    
    
    for(int i=0;i<num_vertex;i++){   
        for(int j=0;j<num_vertex;j++){
			cout<<matrix[i][j]<<' ';
        }
        cout<<endl;
    }  
	return 0;
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值