求多源最短路,Floyd算法实例,洛谷p1744

采购特价商品

一个裸的Floyd算法就行,其核心是遍历,找出通过每个中继点的最短路径。
。。其实这道题先输入了两个顶点数,直接单源Dijkstra就行

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip>
#define INF 10000000
using namespace std;

struct node{
	int x,y;
};


int main() {
	node ding[200];
	double a[200][200];
	fill(a[0],a[0]+170*170,INF);
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>ding[i].x>>ding[i].y;
	}
	int m;
	cin>>m;
	for(int i=0;i<m;i++){
		int b,c;
		cin>>b>>c;
		b=b-1;
		c=c-1;
		a[b][c]=sqrt((ding[b].x-ding[c].x)*(ding[b].x-ding[c].x)+(ding[b].y-ding[c].y)*(ding[b].y-ding[c].y));
		a[c][b]=a[b][c];
	}
	int path[105][105];
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			path[i][j]=j;
		}
	}
	for(int k=0;k<n;k++){
		for(int v=0;v<n;v++){
			for(int w=0;w<n;w++){
				if(a[v][w]>a[v][k]+a[k][w]){
					a[v][w]=a[v][k]+a[k][w];
					path[v][w]=path[v][k];
				}
			}
		}
	}
	int b,c;
	cin>>b>>c;
	cout<<fixed;
	cout<<setprecision(2);
	cout<<a[b-1][c-1];
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值