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();//

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##########
");
42         printf("%d %d
",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("
");
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("
");
54         }
55         printf("##########DEBUG##########
");
56     #endif
57 
58     if(kase!=0)printf("
");
59     printf("puzzle #%d:
",++kase);
60     bool mark[15][15];
61 
62     printf("Across
");
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("
");
73             }
74         }
75     }
76 
77     printf("Down
");
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("
");
88             }
89         }
90     }
91 
92 
93     return true;
94 }
原文地址:https://www.cnblogs.com/ohyee/p/5119672.html