这道题看起来非常复杂,,,看了看大佬们的代码感觉太优秀了。。。。。用最简单的方法考虑所有未知。。。。。。。不浪费一行代码/。。。
1 #include <stdio.h> 2 3 #include <stdlib.h> 4 5 #include <string.h> 6 7 char a[15][15]; 8 9 const int dr[4]= {-1,1,0,0},dc[4]= {0,0,-1,1}; 10 11 const int Horser[8]= {-2,-2,-1,-1,1,1,2,2}; 12 13 const int Horsec[8]= {-1,1,-2,2,-2,2,-1,1}; 14 15 const int Stoner[8]= {-1,-1,-1,-1,1,1,1,1}; 16 17 const int Stonec[8]= {-1,1,-1,1,-1,1,-1,1}; 18 19 int check(int r,int c)//返回值为0表示安全,1表示不安全 20 21 { 22 23 int i,j,t,patten; 24 25 for(t=0; t<=3; t++) 26 27 { 28 29 patten=1; 30 31 for(i=r+dr[t],j=c+dc[t]; i>=1&&i<=10&&j>=1&&j<=9; i+=dr[t],j+=dc[t]) 32 33 { 34 35 if(patten==1)//找车将 36 37 { 38 39 if(a[i][j]) 40 41 { 42 43 if(a[i][j]=='G'||a[i][j]=='R') 44 45 return 1; 46 47 else 48 49 patten=2; 50 51 } 52 53 } 54 55 else if(patten==2)//找炮 56 57 { 58 59 if(a[i][j]) 60 61 { 62 63 if(a[i][j]=='C') 64 65 return 1; 66 67 else 68 69 break; 70 71 } 72 73 } 74 75 } 76 77 } 78 79 for(i=0; i<=7; i++)//找马 80 81 { 82 83 if(!(r+Horser[i]>=1&&r+Horser[i]<=10&&c+Horsec[i]>=1&&c+Horsec[i]<=9)) 84 85 continue; 86 87 if(a[r+Horser[i]][c+Horsec[i]]=='H'&&!a[r+Stoner[i]][c+Stonec[i]]) 88 89 return 1; 90 91 } 92 93 return 0; 94 95 } 96 97 int main() 98 99 { 100 101 int i,n,r,c,rr,cc,result; 102 103 char ch; 104 105 while(1) 106 107 { 108 109 memset(a,0,sizeof a); 110 111 result=1; 112 113 scanf("%d%d%d",&n,&r,&c); 114 115 if(!n&&!r&&!c) 116 117 break; 118 119 for(i=0; i<=n-1; i++) 120 121 { 122 123 scanf(" %c%d%d",&ch,&rr,&cc); 124 125 a[rr][cc]=ch; 126 127 } 128 129 for(i=r+1; i<=10; i++) 130 131 { 132 133 if(a[i][c]) 134 135 { 136 137 if(a[i][c]=='G') 138 139 result=0; 140 141 break; 142 143 } 144 145 } 146 147 if(result) 148 149 { 150 151 for(i=0; i<=3; i++) 152 153 { 154 155 if(r+dr[i]<1||r+dr[i]>3||c+dc[i]<4||c+dc[i]>6) 156 157 continue; 158 159 if(!check(r+dr[i],c+dc[i])) 160 161 { 162 163 result=0; 164 165 break; 166 167 } 168 169 } 170 171 } 172 173 if(result) 174 175 printf("YES\n"); 176 177 else 178 179 printf("NO\n"); 180 181 } 182 183 return 0; 184 185 }
此题中关于棋子的行走方法设计十分·巧妙此类的方法感觉受益匪浅。。。。