Untitled
unknown
plain_text
2 years ago
1.6 kB
14
Indexable
#include <iostream>
#define N 305
using namespace std;
int n;
int a[N][N];
int sx[N];
int sy[N];
int dd[N][N];
int sv,sl,sc;
int minn,maxx;
int hx[]={0,-1,0,1};
int hy[]={-1,0,1,0};
void doc()
{
cin>>n;
minn=200;
maxx=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
if(a[i][j]>maxx)maxx=a[i][j];
if(a[i][j]<minn)minn=a[i][j];
}
//cout<<minn<<" ---"<<maxx<<"\n";
}
bool kt(int u,int v)
{
if(a[1][1]>v||a[1][1]<u)return false;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)dd[i][j]=0;
int dau=1,cuoi=0;
sx[++cuoi]=1;
sy[cuoi]=1;
dd[1][1]=1;
while(dau<=cuoi)
{
int x=sx[dau];
int y=sy[dau];
//cout<<x<<" "<<y<<"\n";
dau++;
for(int i=0;i<4;i++)
{
int xx=x+hx[i];
int yy=y+hy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=n)
if(a[xx][yy]>=u&&a[xx][yy]<=v)
if(dd[xx][yy]==0)
{
dd[xx][yy]=1;
sx[++cuoi]=xx;
sy[cuoi]=yy;
}
}
}
//cout<<u<<" "<<v<<" "<<dd[n][n]<<"\n";
if(dd[n][n]==1)return true;
return false;
}
bool check(int k)
{
for(int i=minn;i<=maxx-k;i++)
{
//cout<<i<<" "<<i+k<<"\n";
if(kt(i,i+k))
{
//cout<<i<<"- "<<i+k<<"\n";
return true;
}
}
return false;
}
int main()
{
//freopen("input.txt","r",stdin);
int TC;
cin>>TC;
for(int tc=1;tc<=TC;tc++)
{
doc();
int lo=0,hi=maxx-minn;
while(lo<hi)
{
int mid=(lo+hi)/2;
if(check(mid))hi=mid;else lo=mid+1;
}
cout<<"#"<<tc<<" ";
cout<<lo<<"\n";
//cout<<sv<<" "<<sl<<" "<<sc<<"\n";
}
return 0;
}Editor is loading...