#recursion #graph #depth-first-search
Вопрос:
Задана сетка из n*m, состоящая из O и X. Задача состоит в том, чтобы найти общее количество фигур «X». Примечание: Фигура » X » состоит из одного или нескольких соседних X (диагонали не включены).
Вход: сетка = {{X,O,X},{O,X,O},{X,X,X}} Вывод: 3 Пояснение: Сетка — X O X O X O X X X X Так, X с одинаковым цветом примыкают друг к другу по вертикали для горизонтали (диагонали не включены). Итак, в данной сетке есть 3 разные группы.
Я написал следующий код для вышеуказанной проблемы, но получаю ошибку во время выполнения. Я не могу понять, что не так с моим кодом.
// { Driver Code Starts
#include<bits/stdc .h>
using namespace std;
void sweep(vector<vector<char>>amp;grid,int visited[][100],int n, int m, int currx, int curry){
// base cases
if(visited[currx][curry]==1) return;
if(grid[currx][curry]!='X') return;
if(currx >=n || currx<0||curry>=m || curry<0) return;
visited[currx][curry] = 1;
sweep(grid,visited,n,m,currx,curry-1);
sweep(grid,visited,n,m,currx,curry 1);
sweep(grid,visited,n,m,currx-1,curry);
sweep(grid,visited,n,m,currx 1,curry);
}
int xShape(vector<vector<char>>amp; grid)
{
int n = grid.size();
int m = grid[0].size();
int countt= 0;
int visited[n 1][100];
// initialize visited array with 0
for(int i=0;i<n;i ){
for(int j=0;j<m;j ){
visited[i][j]=0;
}
}
for(int i=0;i<n;i ){
for(int j=0;j<m;j ){
if(grid[i][j] == 'X' amp;amp; visited[i][j] == 0){
countt = 1;
sweep(grid,visited,n,m,i,j); // sweep through connected cells and make them visited
}
}
}
return countt;
}
// { Driver Code Starts.
int main(){
int tc;
cin >> tc;
while(tc--){
int n, m;
cin >> n >> m;
vector<vector<char>>grid;
for(int i = 0; i < n; i ){
for(int j = 0; j < m; j ){
cin >> grid[i][j];
}
}
int ans = xShape(grid);
cout << ans <<'n';
}
return 0;
} // } Driver Code Ends