#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[12][12],d[110][12]; int b[12][12]; int r,c,con=0; while(~scanf("%d",&r)) { memset(b,0,sizeof(b)); memset(d,0,sizeof(d)); if(r==0) break; con++; scanf("%d",&c); int x=0; for(int i=0; i<r; i++) scanf("%s%*c",a[i]); for(int i=0; i<r; i++) for(int j=0; j<c; j++) { if(a[i][j]!=‘*‘) { if(i-1<0||j-1<0||b[i-1][j]==-1||b[i][j-1]==-1) b[i][j]=++x; } else b[i][j]=-1; } for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { printf("%d ",b[i][j]); } printf("\n"); } if(con>1) printf("\n"); printf("puzzle #%d:\n",con); int flag=0; printf("Across\n"); for(int i=0; i<r; i++) { for(int j=0; j<c; j++) { if((j-1<0||b[i][j-1]==-1)&&b[i][j]>0) { if(b[i][j]>1) printf("\n"); printf("%3d.",b[i][j]); flag=1; } if(flag) { if(a[i][j]!=‘*‘) printf("%c",a[i][j]); } } flag=0; } printf("\n"); flag=0; int p=0,q=0; printf("Down\n"); for(int i=0; i<c; i++) { for(int j=0; j<r; j++) { if((j-1<0||b[j-1][i]==-1)&&b[j][i]!=-1) { d[p][q]=‘\0‘; p=b[j][i]; flag=1; q=0; } if(flag) { if(a[j][i]!=‘*‘) d[p][q++]=a[j][i]; } } flag=0; } for(int i=0;i<=x;i++) if(d[i][0]) printf("%3d.%s\n",i,d[i]); } return 0; }
原文:http://www.cnblogs.com/Wangwanxiang/p/6415292.html