UVA-201,紫书此处有错

这个题数据小,所以我们暴力可解,思路是这样的:    heng[ i ] [ j ]   一旦是 1 , 就意味着,在( i,j )这个点出发有个 向右的线。 zhi[][] 同理,向下的线。然后枚举所有边的情况,一旦judge 函数在某个点,找到了某个 以  len  为边的   完整的方形(len,x,y),就返回1

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int zhi[11][11],heng[11][11]; 
 5 int len[11];
 6 int judge(int len,int x,int y){
 7     for(int i=0;i<len;i++){      //边是由线段构成的,一旦有哪个段不成立,立即退出。
 8         if(zhi[x][y+i]==0)       //从左上角 一直到 左下角
 9             return -1;
10         if(heng[x+i][y]==0)       //从左上角 一直到 右上角
11             return -1;
12         if(zhi[x+len][y+i]==0)    //从 右上角 一直到右下角
13             return -1;
14         if(heng[x+i][y+len]==0)    //从左下角 一直到 右下角
15             return -1;
16     }
17     return 1;                 //都走完了,成立
18 }
19 
20 int main(){
21     int n,m,k;
22     int t1,t2;
23     char c,cc,ccc,cccc;
24     int con=0;
25     while(++con && cin>>n>>m){
26         memset(zhi,0,sizeof(zhi));
27         memset(heng,0,sizeof(heng));
28         memset(len,0,sizeof(len));
29             
30         for(int i=0;i<m;i++){
31             scanf("%c%c%c%d%c%d",&cccc,&c,&cc,&t1,&ccc,&t2);
32         
33             if(c=='H') {/*cout<<"sss"<<endl;  */ zhi[t1][t2]=1; }
34             if(c=='V')    heng[t2][t1]=1;                           //注意,我说的紫书错的地方就在这里,你如果按刘老师写的,那是 heng[t1][t2]=1,我一直卡这里,后来改成符合原题的,ac
35         }
36        
37        if(con!=1) printf("\n**********************************\n\n");
38         for(int i=1;i<=n;i++){
39             for(int x=1;x<=n-i+1;x++){    //压缩
40                 for(int y=1;y<=n-i+1;y++){   //压缩
41                        
42                         if(judge(i,x,y) == 1)
43                         {
44                            //cout<<"ok"<<endl;
45                             len[i]++;
46                         }
47                        
48                 }
49             }
50         }
51     
52     int flag=0;
53     
54     printf("Problem #%d\n\n",con);
55     for(int i=1;i<=n;i++)
56         if(len[i]!=0){
57             flag++;
58             printf("%d square (s) of size %d\n",len[i],i);
59         }
60     if(flag==0)
61         printf("No completed squares can be found.\n");
62 }
63 }

猜你喜欢

转载自www.cnblogs.com/3532gll/p/9416446.html
今日推荐