こんな感じで動くんじゃない?
ちゃんと読んでない上に動かしてもないから知らないけど。

void open_window(int n,int x,int y)
{
if (x < 0){
return;
}
if (y < 0){
return;
}
if (x >= n){
return;
}
if (y >= n){
return;
}
if(arr_data[i] != 'O'){
return;
}

既存部分

open_window(n, x - 1, y);
open_window(n, x + 1, y);
open_window(n, x, y - 1);
open_window(n, x, y + 1);
}