Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- using namespace std;
- int n, m;
- vector<int> begin1;
- vector<int> bfs() {
- vector<int> d(n * m, -1);
- for (int i = 0; i < begin1.size(); i++) {
- d[begin1[i]] = 0;
- }
- vector<int> queue = begin1;
- int qstart = 0;
- while (qstart < queue.size()) {
- int u = queue[qstart];
- qstart++;
- vector<int> go;
- if (u % m != 0) {
- go.push_back(u - 1);
- }
- if (u > m - 1) {
- go.push_back(u - m);
- }
- if (u % m != m - 1) {
- go.push_back(u + 1);
- }
- if (u < n * m - m) {
- go.push_back(u + m);
- }
- for (int j = 0; j < go.size(); j++) {
- int v = go[j];
- if (d[v] == -1) {
- d[v] = d[u] + 1;
- queue.push_back(v);
- }
- }
- }
- return d;
- }
- int main() {
- freopen("table.in", "r", stdin);
- freopen("table.out", "w", stdout);
- scanf("%d%d", &n, &m);
- vector<int> table(n * m);
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- scanf("%d", &table[i * m + j]);
- if (table[i * m + j] == 1) {
- begin1.push_back(i * m + j);
- }
- }
- }
- vector<int> lokoroko = bfs();
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- cout << lokoroko[i * m + j] << ' ';
- }
- cout << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement