标签:
#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