1 条题解

  • 0
    @ 2023-6-11 12:17:10

    C :

    #include<stdio.h>
    
    int a[100][100];
    int dui[10000][3];
    int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    char s[101][101];
    int main(){
    	int i,j,k,m,n;
    	int x1,y1,x2,y2,sum;
    	int top,last;
    	int house=0,cow=0;
    	scanf("%d%d\n",&n,&m);
    	for(i=1;i<=n;i++) gets(s[i]);
    	for(i=1;i<=n;i++)
              for(j=0;j<m;j++)
    		  if(s[i][j]=='#')
                         a[i][j+1]=1;
    
    	for(i=1;i<=n;i++)
    	    for(j=1;j<=m;j++)
    	        if(a[i][j]==1){
    			     x1=i;y1=j;x2=i;y2=j;a[i][j]=0;
    			     top=0;dui[1][1]=x1;dui[1][2]=y1;last=1;
    			     sum=1;
    			     while(top<=last){
    				     top++;
    					 for(k=0;k<4;k++)
    					     if(a[dui[top][1]+d[k][0]][dui[top][2]+d[k][1]]==1){
    						       last++;
    							   dui[last][1]=dui[top][1]+d[k][0];  
    							   dui[last][2]=dui[top][2]+d[k][1];
    							   a[dui[last][1]][dui[last][2]]=0;
    							   sum++;
    							   if(dui[last][1]>x2)x2=dui[last][1];
    							   if(dui[last][2]>y2)y2=dui[last][2];	
    							   if(dui[last][1]<x1)x1=dui[last][1];
    							   if(dui[last][2]<y1)y1=dui[last][2];								   						   						   	
    						 }
    				 }				 
    				 if((x2-x1+1)*(y2-y1+1)==sum)
    				       house++;
    				 else
    				       cow++;
    				 
    		 	     
    			}
    	printf("%d\n%d\n",house,cow); 
        return 0;	
    }
    

    C++ :

    #include<bits/stdc++.h> 
    using namespace std; 
    //r1:谷仓数量,r2:奶牛数量 
    //lx ly:左上角坐标 rx ry:右下角坐标 
    int lx,ly,rx,ry,s,r1,r2;
    //迷宫
    char a[150][150]; 
    
    //探索每个点及相邻的# 
    void fun(int x,int y){
    	a[x][y] = '.';//走过的路径标记
    	s++;
    	
    	//更新左上和右下角的坐标
    	if(x<lx) lx=x;
    	if(y<ly) ly=y; 
    	if(x>rx) rx=x;
    	if(y>ry) ry=y;
    	
    	if(a[x-1][y]=='#') fun(x-1,y);
    	if(a[x+1][y]=='#') fun(x+1,y);
    	if(a[x][y-1]=='#') fun(x,y-1);
    	if(a[x][y+1]=='#') fun(x,y+1);
    }
    
    int main(){ 
        int n,m;
        cin>>n>>m;
    	int i,j;
        for(i = 1;i <= n;i++){
        	for(j = 1;j <= m;j++){
        		cin>>a[i][j];
    		}
    	}
    	
    	//遍历每个点
    	for(i = 1;i <= n;i++){
    		for(j = 1;j <= m;j++){
    			//如果是谷仓或者奶牛 
    			if(a[i][j] == '#'){
    				lx=i;ly=j;rx=i;ry=j;
    				s = 0;
    				fun(i,j);//探索相邻点
    				//如果是矩形(是谷仓)
    				/*
    				rx-lx+1是宽,ry-ly+1是长,当扩张的矩形的面积等于
    				#的个数,那#组成的图形就是矩形,否则不是
    				*/  
    				if(s == (rx-lx+1) * (ry-ly+1)) r1++;
    				else r2++;//是奶牛 
    			}
    		}
    	} 
    	
    	cout<<r1<<endl;
    	cout<<r2<<endl; 
    } 
    
    
    • 1

    信息

    ID
    2360
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者