例题:骑马修栅栏

#include <bits/stdc++.h>
using namespace std;
int n,m,u,v,s,t; 
double a[105][105],x[105],y[105];
int main()
{
	memset(a,0x7f,sizeof(a));
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> x[i] >> y[i];
	cin >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> u >> v;
		a[u][v] = sqrt(abs(x[u]-x[v])*abs(x[u]-x[v])+abs(y[u]-y[v])*abs(y[u]-y[v]));
		a[v][u] = a[u][v];
	}
	cin >> s >> t;
	
	for (int k = 1; k <= n; k++)
	{
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				if (a[i][j] > a[i][k] + a[k][j]) a[i][j] = a[i][k] + a[k][j];
			}
		}
	}
	cout << fixed << setprecision(2) << a[s][t] << endl;
	return 0;
}