Uva 232.Crossword Answers

下面的输出一定要是%3d的格式来输出序号

另外注意两个解之间的空格

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 //#define Debug
 6 
 7 int kase=0;
 8 bool Do();
 9 
10 int main(){
11     //freopen("in.txt","r",stdin);
12     while(Do());
13     return 0;
14 }
15 
16 bool Do(){
17     
18     int r,c;
19     char map[15][15];
20     int number[15][15];
21     int n=1;
22     memset(number,0,sizeof(number));
23 
24     //INPUT
25     scanf("%d",&r);
26     if(r==0)return false;
27     scanf("%d",&c);
28 
29     for(int i=0;i<r;i++)
30         scanf("%s",map[i]);
31     getchar();//\n
32     //INPUT FINISHED
33 
34     //MARK
35     for(int i=0;i<r;i++)
36         for(int j=0;j<c;j++)
37             if(map[i][j]!='*'&&(i==0||j==0||map[i-1][j]=='*'||map[i][j-1]=='*'))number[i][j]=n++;
38     
39 
40     #ifdef Debug
41         printf("##########DEBUG##########\n");
42         printf("%d %d\n",r,c);
43         for(int i=0;i<r;i++){
44             for(int j=0;j<c;j++){
45                 printf("%c",map[i][j]);
46             }
47             printf("\n");
48         }
49         for(int i=0;i<r;i++){
50             for(int j=0;j<c;j++){
51                 printf("%3d",number[i][j]);
52             }
53             printf("\n");
54         }
55         printf("##########DEBUG##########\n");
56     #endif
57 
58     if(kase!=0)printf("\n");
59     printf("puzzle #%d:\n",++kase);
60     bool mark[15][15];
61 
62     printf("Across\n");
63     memset(mark,false,sizeof(mark));
64     for(int i=0;i<r;i++){
65         for(int j=0;j<c;j++){
66             if(number[i][j] && !mark[i][j]){
67                 printf("%3d.",number[i][j]);
68                 for(int k=j;k<c&&map[i][k]!='*';k++){
69                     printf("%c",map[i][k]);
70                     mark[i][k]=true;
71                 }
72                 printf("\n");
73             }
74         }
75     }
76 
77     printf("Down\n");
78     memset(mark,false,sizeof(mark));
79     for(int i=0;i<r;i++){
80         for(int j=0;j<c;j++){
81             if(number[i][j] && !mark[i][j]){
82                 printf("%3d.",number[i][j]);
83                 for(int k=i;k<r&&map[k][j]!='*';k++){
84                     printf("%c",map[k][j]);
85                     mark[k][j]=true;
86                 }
87                 printf("\n");
88             }
89         }
90     }
91 
92 
93     return true;
94 }

 

posted @ 2016-01-10 22:01  OhYee  阅读(286)  评论(0编辑  收藏  举报