太弱了 起初看不懂题目 看了上交的题解里才明白 代码也算是仿照大佬写的。

using namespace std;
int n,r;
int a[30][30];
int num[40][40];
void check(int x,int y){
    int xx=x,yy=y;
    for(int i =0;i<n;i++){
        for(int j =0;j<n;j++){
            if(abs(x-i)+abs(y-j)<=r&&a[i][j]>a[xx][yy]){//细节在于每次只是从原地探访其他可以在r时间内到达的房间    就有了且前面的条件   这也是题目给出的
                xx=i,yy=j;
            }
    }
    }
    if(xx!=x||yy!=y){
        num[xx][yy]+=num[x][y];
        num[x][y]=0;
        check(xx,yy);
    }
}
int main(){
    cin >> n>>r;
    for(int i =0;i<n;i++){
        for(int j =0;j<n;j++){
            cin >> a[i][j];
            num[i][j]=1;
        }
    }
    for(int i =0;i<n;i++){
        for(int j =0;j<n;j++){
            check(i,j);
        }
    }
    int sum =0,maxnum=0;
    for(int i =0;i<n;i++){
        for(int j =0;j<n;j++){
            if(num[i][j]>=1) sum++;
            maxnum=max(maxnum,num[i][j]);
        }
    }
    cout<<sum<<" "<<maxnum<<endl;
    return 0;
}