这题弄了半天,uDebuge上的数据都过了,但是传到voj上是WA
#include<cstdio>
#include<cstring>
int main(){
//freopen("232.in", "r", stdin);
//freopen("232.out", "w", stdout);
int r, c, count, k = 1; //r行c列
char p[15][15],p_ex[15][15], t = '\0';
bool judge[15][15]; //是否已建立新行
while(scanf("%d %d", &r, &c) == 2 && r != 0){
if(k != 1) printf("\n");
memset(p, '\0', sizeof(p));
memset(p, '\0', sizeof(p_ex));
memset(judge, false, sizeof(judge));
int num[15][15] = {0};
for(int i = 0; i < r; ++i) scanf("%s", p[i]);
//for(int i = 0; i < r; ++i) printf("%s\n", p[i]);
count = 0;
for(int i = 0; i < r; ++i)
for(int j = 0; j < c; ++j)
if(p[i][j] != '*' && (i-1 < 0 || j-1 < 0 || (!(p[i-1][j] >= 'A' && p[i-1][j] <= 'Z' && p[i][j-1] >= 'A' && p[i][j-1] <= 'Z'))))
num[i][j] = ++count, judge[i][j] = true;
/*for(int i = 0; i < r; ++i){
for(int j = 0; j < c; ++j)
printf("%d ", num[i][j]);
printf("\n");
}*/
printf("puzzle #%d:\nAcross", k++);
for(int i = 0; i < r; ++i){
for(int j = 0; j < c; ++j)
if(judge[i][j]){
printf("\n%3d.", num[i][j]);
for(int k = j; p[i][k] >= 'A' && p[i][k] <= 'Z'; ++k){
putchar(p[i][k]);
judge[i][k] = false;
}
}
}
printf("\nDown");
for(int i = 0; i < r; ++i){
for(int j = 0; j < c; ++j)
if(num[i][j]){
printf("\n%3d.", num[i][j]);
for(int k = i; p[k][j] >= 'A' && p[k][j] <= 'Z'; ++k){
putchar(p[k][j]);
num[k][j] = 0;
}
}
}
printf("\n");
}
return 0;
}