Language: C++

#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
 
#include <math.h>
#include <iomanip>
#include <vector>
#include <queue>
#include <climits>
using Graph = vector<vector<int>>;
const double PI = 3.14159265358979323846;
#define int long long
 
 
signed main() {
 
 
	int H, W,Ch,Cw,Dh,Dw;
	char S[20000][20000];
	int kaisu[20000][20000];
	queue<pair<int, int>>  mk,kk;
	//mk(未開拓)kk(既開拓)
 
	pair<int, int> tmp;
	
	cin >> H >>W>>Ch>>Cw>>Dh>>Dw;
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			cin >> S[i+1][j+1];
			kaisu[i+1][j+1] = -1;
		}
	}
	for (int i = 0; i < H+1; i++) {
		S[i][0] = '#';
		S[i][W + 1] = '#';
	}
	for (int j = 0; j < W + 1; j++) {
		S[0][j] = '#';
		S[H+1][j] = '#';
	}
 
	if (S[Ch][Cw - 1] == '#'&&S[Ch][Cw + 1] == '#'&&S[Ch - 1][Cw] == '#'&&S[Ch + 1][Cw] == '#') {
		kk.push(make_pair(Ch, Cw));
	}
	else {
		mk.push(make_pair(Ch, Cw));
	}
	kaisu[Ch][Cw] = 0;
 
	int count = 0;
	for (int sasakama = 0; sasakama < H*W*5; sasakama++) {
		if(mk.size()!=0){
			tmp = mk.front();
			int h = tmp.first;
			int w = tmp.second;
			if (S[h + 1][w] == '.' && kaisu[h + 1][w] == -1) {
				mk.push(make_pair(h + 1, w));
				kaisu[h+1][w] = count;
			}
			if (S[h - 1][w] == '.' && kaisu[h - 1][w] == -1) {
				mk.push(make_pair(h - 1, w));
				kaisu[h-1][w] = count;
			}
			if (S[h][w+1] == '.' && kaisu[h][w+1] == -1) {
				mk.push(make_pair(h, w+1));
				kaisu[h][w+1] = count;
			}
			if (S[h][w-1] == '.' && kaisu[h][w-1] == -1) {
				mk.push(make_pair(h, w-1));
				kaisu[h][w-1] = count;
			}
			kk.push(tmp);
			if (h == Dh&&w == Dw) {
				break;
			}
			mk.pop();
		} else if (kk.size() != 0) {
			count++;
			for (int i = 0; i < kk.size(); i++) {
				tmp = kk.front();
				int h = tmp.first;
				int w = tmp.second;
				for (int j = -2; j < 3; j++) {
					for (int k = -2; k < 3; k++) {
						if (h + j >= 1 && h + j <= H&&w + k >= 1&& w + k <= W){
							if (S[h + j][w + k] == '.' && kaisu[h + j][w + k] == -1) {
								mk.push(make_pair(h + j, w + k));
								kaisu[h + j][w + k] = count;
							}
						}
					}
				}
				kk.pop();
			}
		}
		if (sasakama == H*W * 5 - 1) {
			count = -1;
			break;
		}
	}
 
 
	cout << count <<endl;
 
	cin >> count;
 
	return 0;
 
 
}
 
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;

#include <math.h>
#include <iomanip>
#include <vector>
#include <queue>
#include <climits>
using Graph = vector<vector<int>>;
const double PI = 3.14159265358979323846;
#define int long long


signed main() {


	int H, W,Ch,Cw,Dh,Dw;
	char S[2000][2000];
	int kaisu[2000][2000];
	queue<pair<int, int>>  mk,kk;
	//mk(未開拓)kk(既開拓)

	pair<int, int> tmp;
	
	cin >> H >>W>>Ch>>Cw>>Dh>>Dw;
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			cin >> S[i+1][j+1];
			kaisu[i+1][j+1] = -1;
		}
	}
	for (int i = 0; i < H+1; i++) {
		S[i][0] = '#';
		S[i][W + 1] = '#';
	}
	for (int j = 0; j < W + 1; j++) {
		S[0][j] = '#';
		S[H+1][j] = '#';
	}

	if (S[Ch][Cw - 1] == '#'&&S[Ch][Cw + 1] == '#'&&S[Ch - 1][Cw] == '#'&&S[Ch + 1][Cw] == '#') {
		kk.push(make_pair(Ch, Cw));
	}
	else {
		mk.push(make_pair(Ch, Cw));
	}
	kaisu[Ch][Cw] = 0;

	int count = 0;
	for (int sasakama = 0; sasakama < H*W*5; sasakama++) {
		if(mk.size()!=0){
			tmp = mk.front();
			int h = tmp.first;
			int w = tmp.second;
			if (S[h + 1][w] == '.' && kaisu[h + 1][w] == -1) {
				mk.push(make_pair(h + 1, w));
				kaisu[h+1][w] = count;
			}
			if (S[h - 1][w] == '.' && kaisu[h - 1][w] == -1) {
				mk.push(make_pair(h - 1, w));
				kaisu[h-1][w] = count;
			}
			if (S[h][w+1] == '.' && kaisu[h][w+1] == -1) {
				mk.push(make_pair(h, w+1));
				kaisu[h][w+1] = count;
			}
			if (S[h][w-1] == '.' && kaisu[h][w-1] == -1) {
				mk.push(make_pair(h, w-1));
				kaisu[h][w-1] = count;
			}
			kk.push(tmp);
			if (h == Dh&&w == Dw) {
				break;
			}
			mk.pop();
		} else if (kk.size() != 0) {
			count++;
			for (int i = 0; i < kk.size(); i++) {
				tmp = kk.front();
				int h = tmp.first;
				int w = tmp.second;
				for (int j = -2; j < 3; j++) {
					for (int k = -2; k < 3; k++) {
						if (h + j >= 1 && h + j <= H&&w + k >= 1&& w + k <= W){
							if (S[h + j][w + k] == '.' && kaisu[h + j][w + k] == -1) {
								mk.push(make_pair(h + j, w + k));
								kaisu[h + j][w + k] = count;
							}
						}
					}
				}
				kk.pop();
			}
		}
		if (sasakama == H*W * 5 - 1) {
			count = -1;
			break;
		}
	}


	cout << count <<endl;

	cin >> count;

	return 0;


}

Compiler output:
a.cc:125:7: error: conflicting declaration 'using Graph = class std::vector<std::vector<long long int> >'
  125 | using Graph = vector<vector<int>>;
      |       ^~~~~
a.cc:12:7: note: previous declaration as 'using Graph = class std::vector<std::vector<int> >'
   12 | using Graph = vector<vector<int>>;
      |       ^~~~~
a.cc:126:14: error: redefinition of 'const double PI'
  126 | const double PI = 3.14159265358979323846;
      |              ^~
a.cc:13:14: note: 'const double PI' previously defined here
   13 | const double PI = 3.14159265358979323846;
      |              ^~
a.cc:130:8: error: redefinition of 'int main()'
  130 | signed main() {
      |        ^~~~
a.cc:17:8: note: 'int main()' previously defined here
   17 | signed main() {
      |        ^~~~