Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define MAXN 100010
- using namespace std;
- const int INF = 1e6;
- int di[] = {0,0,1,-1};
- int dj[] = {1,-1,0,0};
- int marc[MAXN][MAXN], dist[MAXN][MAXN];
- char M[MAXN][MAXN];
- vector<pii> ms;
- void bfs_ms(){
- memset(dist, MAX_INT, sizeof dist);
- memset(marc, 0, sizeof marc);
- queue<pii> q;
- for(auto e : ms){
- q.push(e);
- marc[e.first][e.second] = 1;
- dist[e.first][e.second] = 0;
- }
- while(!q.empty()){
- pii v = q.front();
- q.pop();
- int i = v.first;
- int j = v.second;
- for(int k = 0; k < 4; k++){
- int ni = i+di[k];
- int nj = j+dj[k];
- if(ni < 0 || nj < 0 || ni >= n || nj >= m) continue;
- if(M[ni][nj] == '#') continue;
- if(marc[ni][nj] != 0) continue;
- q.push({ni,nj});
- marc[ni][nj] = 1;
- dist[ni][nj] = dist[i][j]+1;
- }
- }
- }
- void bfs(int s){
- memset(marc, 0, sizeof marc);
- queue<pii> q;
- q.push(s);
- marc[s.first][s.second] = 1;
- dist[s.first][s.second] = 0;
- while(!q.empty()){
- pii v = q.front();
- q.pop();
- int i = v.first;
- int j = v.second;
- for(int k = 0; k < 4; k++){
- int ni = i+di[k];
- int nj = j+dj[k];
- if(ni < 0 || nj < 0 || ni >= n || nj >= m) continue;
- if(M[ni][nj] == '#') continue;
- if(marc[ni][nj] != 0) continue;
- if(!(dist[i][j]+1 < dist[ni][nj])) continue;
- q.push({ni,nj});
- marc[ni][nj] = 1;
- dist[ni][nj] = dist[i][j]+1;
- }
- }
- }
- int main(){
- }
Advertisement
Add Comment
Please, Sign In to add comment