You have a 2-D grid of size m x n representing a box, and you have n balls. The box is open on the top and bottom sides.
Each cell in the box has a diagonal board spanning two corners of the cell that can redirect a ball to the right or to the left.
1.-1.We drop one ball at the top of each column of the box. Each ball can get stuck in the box or fall out of the bottom. A ball gets stuck if it hits a "V" shaped pattern between two boards or if a board redirects the ball into either wall of the box.
Return an array answer of size n where answer[i] is the column that the ball falls out of at the bottom after dropping the ball from the ith column at the top, or -1 if the ball gets stuck in the box.
Example 1:

Input: grid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]] Output: [1,-1,-1,-1,-1] Explanation: This example is shown in the photo. Ball b0 is dropped at column 0 and falls out of the box at column 1. Ball b1 is dropped at column 1 and will get stuck in the box between column 2 and 3 and row 1. Ball b2 is dropped at column 2 and will get stuck on the box between column 2 and 3 and row 0. Ball b3 is dropped at column 3 and will get stuck on the box between column 2 and 3 and row 0. Ball b4 is dropped at column 4 and will get stuck on the box between column 2 and 3 and row 1.
Example 2:
Input: grid = [[-1]] Output: [-1] Explanation: The ball gets stuck against the left wall.
Example 3:
Input: grid = [[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1],[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1]] Output: [0,1,2,3,4,-1]
Constraints:
m == grid.lengthn == grid[i].length1 <= m, n <= 100grid[i][j] is 1 or -1.class Solution {
public:
int minCostConnectPoints(vector<vector<int>>& pts) {
int n=pts.size(), cost=0, i=0;
vector <int> d(n, INT_MAX-1);
for(int connected=0; ++connected < n;){
d[i]=INT_MAX;
int nearest = i;
for(int j=0; j<n; ++j){
if(d[j]!=INT_MAX){ // isConnected?
d[j]=min(d[j], abs(pts[j][0]-pts[i][0])+abs(pts[j][1]-pts[i][1]));
nearest = d[j]<d[nearest]?j:nearest;
}
}
i=nearest;
cost+=d[i];
}
return cost;
}
};class Solution {
public:
vector<int> findBall(vector<vector<int>>& grid) {
vector<int> res;
for(int i=0; i<grid[0].size(); i++){
pair<int, int> curr = {0, i};
bool stuck = false;
while(!stuck && curr.first<grid.size()-1){
int currVal = grid[curr.first][curr.second];
if(curr.second+currVal<grid[0].size() && curr.second+currVal>=0 && currVal*grid[curr.first][curr.second+currVal]==1)
curr.first++, curr.second+=currVal;
else stuck = true;
// cout << "(" << curr.first << "," << curr.second << ")\n";
}
// cout << "---" << endl;
int currVal = grid[curr.first][curr.second];
res.push_back(stuck || curr.second+currVal>=grid[0].size() || curr.second+currVal<0 || currVal*grid[curr.first][curr.second+currVal]!=1?-1:curr.second+grid[curr.first][curr.second]);
}
return res;
}
};