行・列に隣り合う配列の要素を調べたい
C言語でパズル的なものを作成していますが、
解らないことがありこちらで質問させていただきます。
何卒、よろしくお願いします。
―――――――――――――――――――
char list[7][7] = {
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0},
{0,0,1,9,1,0,0},
{0,0,0,1,1,0,0},
{0,0,0,1,0,1,0},
{0,0,0,0,0,0,0},
};
int result[7*7][2]; // [n][0]=x, [n][1]=y
例えば、上記のような配列があり、
list[4][4]の位置から探索開始したとします。
(解り易くするため仮に'9'を指定しています)
このlist[4][4]から「上下左右」に調べ、
'1'があればそこから更に上下左右に調べるといった感じで、
'1'で繋がってる配列の要素番号を抜き出したいのです。
例えばlist[4][5]が'1'であるため、
次にlist[5][5]とlist[4][6]を調べます。
また、list[3][4]の上下左には'1'が無いのでこの配列の探索は終了となります。
上記例でいえば、'x'の点が求めたい要素番号に該当します。
char list[7][7] = {
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,x,0,0},
{0,0,x,9,x,0,0},
{0,0,0,x,x,0,0},
{0,0,0,x,0,1,0},
{0,0,0,0,0,0,0},
};
このような処理をする上で、
何か良いアルゴリズム等は方法はないでしょうか?
補足
失礼しました。 「全部つながらないように」は余計でした。 たとえば 000 010 000 となったり 001 010 000 となる場合を避けて繰り返していきたいのですが可能ですかね?