方向开始都搞乱了。调半天。
#include <iostream> #include <stdio.h> using namespace std; int n,u,d,l,r,num,flag; char map[55][55]; int dfsu(int x,int y){ if(map[x][y]!='#') return num; if(map[x][y-1]=='#' || map[x][y+1]=='#'){ flag=1; return num; } if(map[x][y]=='#'){ num++; dfsu(x-1,y); } } int dfsd(int x,int y){ if(map[x][y]!='#') return num; if(map[x][y-1]=='#' || map[x][y+1]=='#'){ flag=1; return num; } if(map[x][y]=='#'){ num++; dfsd(x+1,y); } } int dfsl(int x,int y){ if(map[x][y]!='#') return num; if(map[x-1][y]=='#' || map[x+1][y]=='#'){ flag=1; return num; } if(map[x][y]=='#'){ num++; dfsl(x,y-1); } } int dfsr(int x,int y){ if(map[x][y]!='#') return num; if(map[x-1][y]=='#' || map[x+1][y]=='#'){ flag=1; return num; } if(map[x][y]=='#'){ num++; dfsr(x,y+1); } } int main() { //freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=0;i<n;i++){ scanf("%s",map[i]); } /*for(int i=0;i<n;i++){ printf("%s\n",map[i]); }*/ int res=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ flag=0; if(map[i][j]=='#' && i>0 && j>0 && i<n-1 && j<n-1){ num=0; l=dfsl(i,j-1); num=0; r=dfsr(i,j+1); num=0; u=dfsu(i-1,j); num=0; d=dfsd(i+1,j); //printf("x=%d,y=%d %d %d %d %d\n",i,j,u,d,l,r); if(u>0 && d>0 && l>0 && r>0 && !flag && u==d && d==l && l==r && r==u){ res++; } } } } printf("%d\n",res); } return 0; }