算法模板
vector<vector<int>> problem(vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size();
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
vector<vector<int>> result(m, vector<int>(n));
vector<vector<int>> visited(m, vector<int>(n));
queue<pair<int, int>> q;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
visited[i][j] = 0;
result[i][j] = 0;
}
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(特定条件) {
q.push({i,j});
visited[i][j] = 1;
}
}
}
while(!q.empty()) {
auto [x,y] = q.front();
q.pop();
for(int i = 0; i < 4; i++) {
int nx=x+dx[i], ny=x+dy[i];
if(nx<m&&nx>=0&&ny<n&&ny[i]>=0&&!visited[nx][ny]) {
if(特定条件) {
q.push({nx, ny});
visited[nx][ny] = 1;
}
}
}
}
return dist;
}
特殊的广度优先遍历—层次遍历
vector<vector<int>> problem(vector<vector<int>>& mat) {
int m = mat.size(), n = mat[0].size();
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
vector<vector<int>> result(m, vector<int>(n));
vector<vector<int>> visited(m, vector<int>(n));
queue<pair<int, int>> q;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
visited[i][j] = 0;
result[i][j] = 0;
}
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(特定条件) {
q.push({i,j});
visited[i][j] = 1;
}
}
}
while(!q.empty()) {
int size = q.size();
for(int k = 0; k < size; k++){
auto [x,y] = q.front();
q.pop();
for(int i = 0; i < 4; i++) {
int nx=x+dx[i], ny=x+dy[i];
if(nx<m&&nx>=0&&ny<n&&ny[i]>=0&&!visited[nx][ny]) {
if(特定条件) {
result=特定操作
q.push({nx, ny});
visited[nx][ny] = 1;
}
}
}
}
}
return dist;
}