首页 > 其他 > 详细

Uva 232.Crossword Answers

时间:2016-01-10 22:39:37      阅读:239      评论:0      收藏:0      [点我收藏+]

下面的输出一定要是%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 }

 

Uva 232.Crossword Answers

原文:http://www.cnblogs.com/ohyee/p/5119672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!