最短路用的是
#include <bits/stdc++.h>
using namespace std;
#define id(i,j) (i-1)*m+j
const int maxn=2e5+10;
const int inf=1e9;
int a[109][109],n,ju[109][109],vis[maxn],dis[maxn],m;
int x[5]={0,0,1,-1},y[5]={1,-1,0,0},T;
double ans;
struct edge{
int to,nxt,w;
}d[maxn]; int head[maxn],cnt=1;
void add(int u,int v,int w)
{
d[++cnt] = (edge){v,head[u],w},head[u] = cnt;
}
typedef pair<int,int>p;
priority_queue<p,vector<p>,greater<p> >q;
void dij(int s,int x,int y)
{
for(int i=1;i<=n*m;i++) dis[i]=inf,vis[i]=0;
dis[s]=0;
q.push( p(0,s) );
while( !q.empty() )
{
int u=q.top().second; q.pop();
for(int i=head[u];i;i=d[i].nxt )
{
int v=d[i].to;
if( dis[u]+d[i].w<dis[v] )
{
dis[v] = dis[u]+d[i].w;
if( !vis[v] )
vis[v]=1,q.push( p(dis[v],v) );
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if( dis[id(i,j)]+a[x][y]<=T )
{
ans = max( ans,sqrt((x-i)*(x-i)*1.0+(y-j)*(y-j)*1.0) );
}
}
}
int main()
{
cin >> n >> m >> T;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char ff; cin >> ff;
a[i][j] = ff-'0';
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
for(int q=0;q<4;q++)
{
int nx = i +x[q],ny = j+y[q];
if( nx<1||ny<1||nx>n||ny>n ) continue;
add( id(i,j),id(nx,ny),a[nx][ny]==1 );
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) dij( id(i,j),i,j );
printf("%.6lf",ans);
}
京公网安备 11010502036488号