1 条题解
-
0
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
- 上传者