HDU3368+枚举

题意看不懂的直接看百度百科对黑白棋的解释。。。

做法:分情况讨论,一共8个方向。

  1 /*
  2 搜索
  3 */
  4 #include<stdio.h>
  5 #include<string.h>
  6 const int maxn = 10;
  7 char mat[ maxn ][ maxn ];
  8 const int dx[]={-1,1,-1,1};
  9 const int dy[]={1,-1,-1,1};
 10 
 11 int max( int a,int b ){
 12     return a>b?a:b;
 13 }
 14 
 15 bool in( int x,int y ){
 16     if( x>=1&&x<=8&&y>=1&&y<=8 ) return true;
 17     else return false;
 18 }
 19 
 20 int solve( int x,int y ){
 21     int ans = 0;
 22     int pos;
 23 
 24     pos = -1;
 25     for( int i=y+1;i<=8;i++ ){
 26         if( mat[x][i]=='D' ){
 27             pos = i;
 28             break;
 29         }
 30     }
 31     if( pos!=-1 ){
 32         for( int i=y+1;i<=pos;i++ ){
 33             if( mat[x][i]=='*' ){
 34                 pos = -1;
 35                 break;
 36             }
 37         }
 38     }
 39     if( pos!=-1 ){
 40         for( int i=y+1;i<=pos;i++ ){
 41             if( mat[x][i]=='L' )
 42                 ans++;
 43         }
 44     }
 45     //right
 46     pos = -1;
 47     for( int i=y-1;i>=1;i-- ){
 48         if( mat[x][i]=='D' ){
 49             pos = i;
 50             break;
 51         }
 52     }
 53     if( pos!=-1 ){
 54         for( int i=y-1;i>=pos;i-- ){
 55             if( mat[x][i]=='*' ){
 56                 pos = -1;
 57                 break;
 58             }
 59         }
 60     }
 61     if( pos!=-1 ){
 62         for( int i=y-1;i>=pos;i-- ){
 63             if( mat[x][i]=='L' )
 64                 ans++;
 65         }
 66     }
 67     //left
 68     pos = -1;
 69     for( int i=x+1;i<=8;i++ ){
 70         if( mat[i][y]=='D' ){
 71             pos = i;
 72             break;
 73         }
 74     }
 75     if( pos!=-1 ){
 76         for( int i=x+1;i<=pos;i++ ){
 77             if( mat[i][y]=='*' ){
 78                 pos = -1;
 79                 break;
 80             }
 81         }
 82     }
 83     if( pos!=-1 ){
 84         for( int i=x+1;i<=pos;i++ ){
 85             if( mat[i][y]=='L' )
 86                 ans++;
 87         }
 88     }
 89     //down
 90     pos = -1;
 91     for( int i=x-1;i>=1;i-- ){
 92         if( mat[i][y]=='D' ){
 93             pos = i;
 94             break;
 95         }
 96     }
 97     if( pos!=-1 ){
 98         for( int i=x-1;i>=pos;i-- ){
 99             if( mat[i][y]=='*' ){
100                 pos = -1;
101                 break;
102             }
103         }
104     }
105     if( pos!=-1 ){
106         for( int i=x-1;i>=pos;i-- ){
107             if( mat[i][y]=='L' )
108                 ans++;
109         }
110     }
111     //up
112     int posx,posy;
113     int K;
114     posx = -1;
115     for( int k=1;k<=8;k++ ){
116         int tx = x+k*dx[0];
117         int ty = y+k*dy[0];
118         if( in(tx,ty)==false ) break;
119         if( mat[tx][ty]=='D' ){
120             posx = tx;
121             posy = ty;
122             K = k;
123             break;
124         }
125     }
126     if( posx!=-1 ){
127         for( int k=1;k<=K;k++ ){
128             int tx = x+k*dx[0];
129             int ty = y+k*dy[0];
130             if( in(tx,ty)==false ) break;
131             if( mat[tx][ty]=='*' ){
132                 posx = -1;
133                 break;
134             }
135         }
136     }
137     if( posx!=-1 ){
138         for( int k=1;k<=K;k++ ){
139             int tx = x+k*dx[0];
140             int ty = y+k*dy[0];
141             if( in(tx,ty)==false ) break;
142             if( mat[tx][ty]=='L' )
143                 ans++;
144         }
145     }
146     //right && up
147     posx = -1;
148     for( int k=1;k<=8;k++ ){
149         int tx = x+k*dx[1];
150         int ty = y+k*dy[1];
151         if( in(tx,ty)==false ) break;
152         if( mat[tx][ty]=='D' ){
153             posx = tx;
154             posy = ty;
155             K = k;
156             break;
157         }
158     }
159     if( posx!=-1 ){
160         for( int k=1;k<=K;k++ ){
161             int tx = x+k*dx[1];
162             int ty = y+k*dy[1];
163             if( in(tx,ty)==false ) break;
164             if( mat[tx][ty]=='*' ){
165                 posx = -1;
166                 break;
167             }
168         }
169     }
170     if( posx!=-1 ){
171         for( int k=1;k<=K;k++ ){
172             int tx = x+k*dx[1];
173             int ty = y+k*dy[1];
174             if( in(tx,ty)==false ) break;
175             if( mat[tx][ty]=='L' )
176                 ans++;
177         }
178     }
179     //left && down
180     posx = -1;
181     for( int k=1;k<=8;k++ ){
182         int tx = x+k*dx[2];
183         int ty = y+k*dy[2];
184         if( in(tx,ty)==false ) break;
185         if( mat[tx][ty]=='D' ){
186             posx = tx;
187             posy = ty;
188             K = k;
189             break;
190         }
191     }
192     if( posx!=-1 ){
193         for( int k=1;k<=K;k++ ){
194             int tx = x+k*dx[2];
195             int ty = y+k*dy[2];
196             if( in(tx,ty)==false ) break;
197             if( mat[tx][ty]=='*' ){
198                 posx = -1;
199                 break;
200             }
201         }
202     }
203     if( posx!=-1 ){
204         for( int k=1;k<=K;k++ ){
205             int tx = x+k*dx[2];
206             int ty = y+k*dy[2];
207             if( in(tx,ty)==false ) break;
208             if( mat[tx][ty]=='L' )
209                 ans++;
210         }
211     }
212     //left &&up
213     posx = -1;
214     for( int k=1;k<=8;k++ ){
215         int tx = x+k*dx[3];
216         int ty = y+k*dy[3];
217         if( in(tx,ty)==false ) break;
218         if( mat[tx][ty]=='D' ){
219             posx = tx;
220             posy = ty;
221             K = k;
222             break;
223         }
224     }
225     if( posx!=-1 ){
226         for( int k=1;k<=K;k++ ){
227             int tx = x+k*dx[3];
228             int ty = y+k*dy[3];
229             if( in(tx,ty)==false ) break;
230             if( mat[tx][ty]=='*' ){
231                 posx = -1;
232                 break;
233             }
234         }
235     }
236     if( posx!=-1 ){
237         for( int k=1;k<=K;k++ ){
238             int tx = x+k*dx[3];
239             int ty = y+k*dy[3];
240             if( in(tx,ty)==false ) break;
241             if( mat[tx][ty]=='L' )
242                 ans++;
243         }
244     }
245     //right && down
246 
247     return ans;
248 }
249 
250 int main(){
251     int T;
252     scanf("%d",&T);
253     int ca = 1;
254     while( T-- ){
255         for( int i=1;i<=8;i++ ){
256             scanf("%s",mat[i]+1);
257         }
258         //memset( vis,false,sizeof( vis ) );
259         int ans = 0;
260         for( int i=1;i<=8;i++ ){
261             for( int j=1;j<=8;j++ ){
262                 if( mat[i][j]=='*' ){
263                     ans = max( ans,solve( i,j ) );
264                     //if( ans>0 ) printf("attention:%d %d \n",i,j);
265                 }
266             }
267         }
268         printf("Case %d: %d\n",ca++,ans);
269     }
270     return 0;
271 }
View Code

 

posted @ 2013-07-18 10:18  xxx0624  阅读(297)  评论(0编辑  收藏  举报