您的位置:首页 > 其它

OUVa 232 Crossword answer

2016-05-25 11:27 260 查看
求一个网格中的横纵字符串

</pre><pre name="code" class="cpp">
#include "stdafx.h"
#include<iostream>
#include<string>
#include<iomanip>

using namespace std;

typedef struct {
char cval;
int num;
} Elem;

int main()
{
#ifndef TEST
FILE *fp;
freopen_s(&fp, "data.in.txt", "r", stdin);
freopen_s(&fp, "data.out.txt", "w", stdout);
#endif
int cnt = 0;
int row = 0, col = 0;

/*initialize the struct array*/
const int conRow = 100;
const int conCol = 100;
Elem **eArr = new Elem*[conRow];
for (int i = 0; i < conRow; ++i)
eArr[i] = new Elem[conCol];

while (cin >> row && row != 0) {
cin >> col;
string line;
int index = 0;
for (int i = 0; i < row; ++i) {
cin >> line;
for (int j = 0; j < col; ++j) {
eArr[i][j].cval = line[j];
if (line[j] != '*')
if (i == 0 || j == 0 || eArr[i - 1][j].cval == '*' || eArr[i][j - 1].cval == '*')
eArr[i][j].num = ++index;
}
}//endfor

/*output across*/
cnt++;
if (cnt > 1)
cout << endl;
cout << "puzzle #" << cnt << ":" << endl;
cout << "Across" << endl;
for (int i = 0; i < row; ++i) {
for (int j = 0;;) {
while (j < col && eArr[i][j].cval == '*') j++;
if (j < col)//first elem
cout << setw(3) << eArr[i][j].num << ".";
else
break;
while (j < col && eArr[i][j].cval != '*')
cout << eArr[i][j++].cval;
cout << endl;
}//endfor
}//endfor

cout << "Down" << endl;
int *pos = new int[col]();
for (int j = 0; j < col; ++j)
while (pos[j] < row && eArr[pos[j]][j].cval == '*') pos[j]++;

while (true) {
int i = 0;
for (int j = 1; j < col; ++j)// lest one
if (pos[j] < pos[i])
i = j;

if (pos[i] == row)
break;
cout << setw(3) << eArr[pos[i]][i].num << ".";
while (pos[i] < row && eArr[pos[i]][i].cval != '*')
cout << eArr[pos[i]++][i].cval;
cout << endl;

while (pos[i] < row && eArr[pos[i]][i].cval == '*') pos[i]++;
}//endwhile
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: