-3

これはcrossword game. 配列を斜めに読みたい。この配列は特定のファイルから読み取られ、n*m サイズです。m = n とは限らない

このように斜めに与えられた2dをどのように読むことができますか:

例:

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

ball: found

[b] o o k
z [a] k o
s l [l] e
x y z [l]

foo: not found

コードは次のとおりです。

char ReadArray(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';
}
4

1 に答える 1

2
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);
   }
}

毎回空のリストへの参照を渡します。リストには、その後のすべての可能な文字列が含まれているため、線形検索を実行します。

于 2015-07-09T19:23:57.303 に答える