题解 | 最大正方形

最大正方形

https://www.nowcoder.com/practice/f6beb4837e8f43c997141e0b6041285d

//注意i.j是行列,换成坐标就是(j,i)
//学到的数学方法:向量旋转公式
//对于多重循环更加清晰
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,len=0;
    cin>>n;
    vector<string>s(n);
    for(int i=0;i<n;i++){
        cin>>s[i];
    }
    vector<vector<int>>ans(n,vector<int>(n,0));
    int x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0;
    for(int i1=0;i1<n;i1++){
        for(int j1=0;j1<n;j1++){
            if(s[i1][j1]!='#')continue;
            for(int i2=i1;i2<n;i2++){
                for(int j2=0;j2<n;j2++){
                    if (i1 == i2 && j1 == j2) continue;
                    if(s[i2][j2]!='#')continue;
                    int dx=j2-j1,dy=i2-i1;
                    int j4=j1-dy,i4=i1+dx;
                    int j3=j2-dy,i3=i2+dx;
                    if(i3<0||i3>=n||i4<0||i4>=n||j3<0||j3>=n||j4<0||j4>=n)continue;
                    if(s[i3][j3]!='#'||s[i4][j4]!='#')continue;
                    int bian=dx*dx+dy*dy;
                    if(bian>len){
                        len=bian;
                        x1=i1;y1=j1;
                        x2=i2;y2=j2;
                        x3=i3;y3=j3;
                        x4=i4;y4=j4;
                    }
                }
            }
        }
    }
    cout<<x1+1<<" "<<y1+1<<endl;
    cout<<x2+1<<" "<<y2+1<<endl;
    cout<<x3+1<<" "<<y3+1<<endl;
    cout<<x4+1<<" "<<y4+1<<endl;
    return 0;
}

全部评论

相关推荐

04-28 10:14
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务