Isaac
BAN USERbool go_check(vector<vector<bool>> &matrix){
int m=matrix.size(), n=matrix[0].size();
vector<pair<int,int>> store;
for(int i=0; i<m; ++i){
if(!matrix[i][0])
store.push_back(make_pair(i,0));
if(!matrix[i][n-1])
store.push_back(make_pair(i,n-1));
}
for(int j=0; j<n; ++j){
if(!matrix[0][j])
store.push_back(make_pair(0,j));
if(!matrix[m-1][j])
store.push_back(make_pair(m-1,j));
}
if(store.empty())
return true;
vector<vector<bool>> visited(m, vector<bool>(n,0));
function<void(int,int)> fun=[&](int i, int j){
if(i<0 || i>=m || j<0 || j>=n || visited[i][j] || matrix[i][j])
return;
visited[i][j]=true;
if((i==0 || i==m-1) && (j==0 || j==n-1))
return;
fun(i-1,j);
fun(i+1,j);
fun(i,j-1);
fun(i,j+1);
};
for_each(store.begin(), store.end(), [&fun](pair<int,int> p){ fun(p.first, p.second); });
for(int i=0; i<m; ++i)
for(int j=0; j<n; ++j)
if(!visited[i][j] && !matrix[i][j])
return true;
return false;
}
- Isaac January 16, 2015