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 }
然而,我并不能保证我说的是对的。请自行验证,如有错误,请指正
新博客地址
https://www.oyohyee.com
https://www.oyohyee.com