
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,m,vis[N][N],sx,sy,ex,ey;
double s[N][N],d[N][N],mi;
const double PI=sqrt(2)-1;
int dir[8][2]= {1,0,-1,0,0,1,0,-1,1,1,-1,-1,1,-1,-1,1};
struct T
{
int x,y;
} a,b,p;
int chaji(T a,T b,T p)
{
return (b.x-a.x)*(p.y-a.y)-(b.y-a.y)*(p.x-a.x);
}
void spfa()
{
memset(vis,0,sizeof vis);
memset(d,0x7f,sizeof d);
a.x=sx,a.y=sy,b.x=ex,b.y=ey;
d[sx][sy]=s[sx][sy];
queue<T>Q;
Q.push(a);
while(!Q.empty())
{
int x=Q.front().x,y=Q.front().y;
Q.pop();
vis[x][y]=0;
for(int i=0; i<8; i++)
{
double w=0;
p.x=x+dir[i][0],p.y=y+dir[i][1];
if(p.x<0||p.x>=n||p.y<0||p.y>=m) continue;
if(chaji(a,b,p)>0||p.x==ex&&p.y==ey)
{
w=s[p.x][p.y];
if(i>3) w=w+(s[x][y]+s[p.x][p.y])*PI;
if(d[p.x][p.y]>d[x][y]+w)
{
d[p.x][p.y]=d[x][y]+w;
if(!vis[p.x][p.y])Q.push(p),vis[p.x][p.y]=1;
}
}
}
}
mi+=d[ex][ey];
}
int main()
{
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>s[i][j];
cin>>sy>>sx>>ey>>ex;
mi=-s[ex][ey]-s[sx][sy];
spfa();
swap(ex,sx),swap(ey,sy);
spfa();
printf("%.2f",mi);
return 0;
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架