arrays — игра в кроссворды: прочитайте 2d по диагонали Переполнение стека

Я хочу прочитать массив так же, как это
это кроссворд
я должен найти какое-то слово во всем 2-м массиве
этот массив читать из данного файла
и это размер n * m; м не всегда = н

а б в г е ф
г ч и ч к л
m n o q r s
t u v x y z

Как я могу прочитать 2d по диагонали, как это:
все возможное ::

1:mu
2:gnv - diagonally
a b c d e f
[g] h i j k l
m [n] o q r s
t u [v] x y z
3:ahox
4:ahox
5:ciqy
6:eks

реальный пример

m=4
n=4
b o o k
z a k o
s l l e
x y z l

ball: found
foo: not found

-3

Решение

char readrc(char* array, int r, int c, int n, int m)
{
return (r > 0 && r <= n && c > 0 && c <= m) ?
array[n * (r - 1) + (c - 1)] : '\0';
}

void read_down_right(char* array, int n, int m, vector<string>& list)
{
for (int sc = 2 - n; sc <= m - 1; sc++)
{
string str = "";
for (int r = 1, c = sc; r <= n; r++, c++)
{
char chr = readrc(array, r, c, n, m);
if (chr != '\0')
str += chr;
}
list.push_back(str);
}
}

void read_down_left(char* array, int n, int m, vector<string>& list)
{
for (int sc = 2; sc <= m + n - 2; sc--)
{
string str = "";
for (int r = 1, c = sc; r <= n; r++, c--)
{
char chr = readrc(array, r, c, n, m);
if (chr != '\0')
str += chr;
}
list.push_back(str);
}
}

передать ссылку на пустой список каждый раз. список содержит все возможные строки, затем выполните линейный поиск.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector