hud4414-Finding crosses(简单题)
枚举中间点,向四个方向搜索十字架,注意十字架旁边不能为#
View Code
1 //Accepted 4414 0MS 244K 1157 B C++ 2 #include <stdio.h> 3 #include <string.h> 4 int n; 5 char map[51][51]; 6 7 int cmp(int x,int y) 8 { 9 if( x >= 0 && y >=0 && x < n && y < n && map[x][y]=='#') 10 return 1; 11 return 0; 12 } 13 14 int solve1(int x,int y) 15 { 16 int a,b,c,d;//a上 b下 c左 d右 17 int i; 18 a = b = c = d = 0; 19 //向上 20 for(i=x-1;i>=0;i--) 21 { 22 if(cmp(i,y)) 23 { 24 a++; 25 if(cmp(i,y-1) || cmp(i,y+1)) 26 return 0; 27 } 28 else break; 29 } 30 //向下 31 for(i=x+1;i<n;i++) 32 { 33 if(cmp(i,y)) 34 { 35 b++; 36 if(cmp(i,y-1) || cmp(i,y+1)) 37 return 0; 38 } 39 else break; 40 } 41 //向左 42 for(i=y-1;i>=0;i--) 43 { 44 if(cmp(x,i)) 45 { 46 c++; 47 if(cmp(x-1,i) || cmp(x+1,i)) 48 return 0; 49 } 50 else break; 51 } 52 //向右 53 for(i=y+1;i<n;i++) 54 { 55 if(cmp(x,i)) 56 { 57 d++; 58 if(cmp(x-1,i) || cmp(x+1,i)) 59 return 0; 60 } 61 else break; 62 } 63 if(a == b && c == d && a == c && a > 0) 64 return 1; 65 return 0; 66 } 67 68 int main(void) 69 { 70 int i,j; 71 while(scanf("%d",&n)==1 && n) 72 { 73 for(i=0;i<n;i++) 74 scanf("%s",map[i]); 75 int ans = 0; 76 for(i=1;i<n-1;i++) 77 for(j=1;j<n-1;j++) 78 if(map[i][j]=='#' && solve1(i,j)) 79 ans++; 80 printf("%d\n",ans); 81 } 82 return 0; 83 }


浙公网安备 33010602011771号