3-6习题
https://vjudge.net/problem/UVA-232
#include<iostream>
#include<string>
using namespace std;
struct node {
int x,y,number;
node(int a, int b,int c) {
x = a, y = b,number=c;
}
node() = default;
};
node ssta[105];//上无白格
node lsta[105];//左无白格
int stop, ltop;
int main() {
string s[15];
int r, c, cnt = 0, nn;
while (cin >> r && r != 0) {
++cnt;
nn = 0;
stop = ltop = -1;
cin >> c;
for (int i = 0; i < r; ++i)
cin >> s[i];
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j) {
if (s[i][j] != '*' && (i == 0 || s[i - 1][j] == '*' || j == 0 || s[i][j - 1] == '*')) ++nn;
if (s[i][j] != '*' && (i == 0 || s[i - 1][j] == '*')) ssta[++stop] = node(i, j, nn);
if (s[i][j] != '*' && (j == 0 || s[i][j - 1] == '*')) lsta[++ltop] = node(i, j, nn);
}
if (cnt != 1) cout << endl;
printf("puzzle #%d:\nAcross\n", cnt);
for (int i = 0; i <= ltop; ++i) {
printf("%3d.", lsta[i].number);
int k = lsta[i].y;
while (k < c && s[lsta[i].x][k] != '*')
printf("%c", s[lsta[i].x][k++]);
printf("\n");
}
printf("Down\n");
for (int i = 0; i <= stop; ++i) {
printf("%3d.", ssta[i].number);
int k = ssta[i].x;
while (k < r && s[k][ssta[i].y] != '*')
printf("%c", s[k++][ssta[i].y]);
printf("\n");
}
}
}