标签:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
#define INF 0x7fffffff
queue<int> q;
int n,m,t,a[50][50],vis[50][50],d[50][50];
int dic[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char s[50][50];
double dis(int i,int j,int ii,int jj)
{
return sqrt((double)((ii-i)*(ii-i)+(jj-j)*(jj-j)));
}
bool check(int x,int y)
{
if(x<0||y<0||x>=n||y>=m)
return false;
return true;
}
void SPFA(int sx,int sy)
{
int xx,yy;
while(!q.empty()) q.pop();
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
d[i][j]=INF;
}
vis[sx][sy]=1;
d[sx][sy]=a[sx][sy];
q.push(sx),q.push(sy);
while(!q.empty())
{
int x,y;
x=q.front(),q.pop();
y=q.front(),q.pop();
for(int i=0;i<4;i++)
{
xx=x+dic[i][0],yy=y+dic[i][1];
if(!check(xx,yy)) continue;
if(d[x][y]+a[xx][yy]<d[xx][yy]&&d[x][y]+a[xx][yy]<=t)
{
d[xx][yy]=d[x][y]+a[xx][yy];
if(!vis[xx][yy])
{
vis[xx][yy]=1;
q.push(xx),q.push(yy);
}
}
}
vis[x][y]=0;
}
}
int main()
{
double ans;
memset(a,0,sizeof(a));
scanf("%d%d%d",&n,&m,&t);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(s[i][j]==‘0‘)
a[i][j]=0;
else if(s[i][j]==‘1‘)
a[i][j]=1;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
SPFA(i,j);
for(int ii=0;ii<n;ii++)
{
for(int jj=0;jj<m;jj++)
{
if(d[ii][jj]<=t)
ans=max(ans,dis(i,j,ii,jj));
}
}
}
}
printf("%.6lf\n",ans);
return 0;
}
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4265210.html