help!!!!!!面积和周长反过来了!
查看原帖
help!!!!!!面积和周长反过来了!
543527
leo888楼主2021/8/12 22:10
#include<bits/stdc++.h>
using namespace std;
const int fx[4]={1,0,-1,0};
const int fy[4]={0,1,0,-1};
int n;
bool vis[1001][1001];
char a[1001][1001];
int c,s,ss;
int maxs=-99999,maxc=-99999;
int S(int x,int y){//算每一个点周长 
    int ss=0;
    for(int i=0;i<4;i++){
        int tx=x+fx[i];
        int ty=y+fy[i];
        if(a[tx][ty]=='.')ss++;
    }
    return ss;
}
void dfs(int x,int y){
    vis[x][y]=c;
    for(int i=0;i<4;i++){
        int tx=x+fx[i];
        int ty=y+fy[i];
        if(!vis[tx][ty] && tx>=1 && ty>=1 && tx<=n && ty<=n && a[tx][ty]=='#'){
            c++;//面积 
            s+=S(tx,ty);
            dfs(tx,ty);
        }
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j];
    for (int i = 0; i <= n + 1; i++){
		a[0][i] = '.';
		a[n + 1][i] = '.';
		a[i][0] = '.';
		a[i][n + 1] = '.';
	}
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(a[i][j]=='#'){
                c=1;
                s=S(i,j);
                dfs(i,j);
                if(maxs < s) maxs = s, maxc = c;
				if(maxs == s)
					if (maxc > c) maxc = c; 
            }
        }
    }
    cout<<maxs<<' '<<maxc;
    return 0;
} 
2021/8/12 22:10
加载中...