https://www.acmicpc.net/problem/2589
2589번: 보물섬
보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서
www.acmicpc.net
흐음 쉽네요! 이제 슬슬 골드도 쉬워지는걸까용
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
using namespace std;
struct Point {
int i, j,t, cnt;
char c;
};
void Prints(vector<vector<int>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<bool>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<char>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<char>>>maps, int n, int m,int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<bool>>>maps, int n, int m, int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
struct Data {
string str;
int cnt;
};
struct Word {
std::string word;
int count;
};
int main() {
int n;
int m;
cin >> n >> m;
vector<vector<char>>maps;
vector<bool>tmpMaps(m,false);
vector<vector<bool>>initbVisited(n, tmpMaps);
vector<vector<bool>>bVisited(n, tmpMaps);
for (int i = 0; i < n; i++) {
string str;
cin >> str;
vector<char>tmpMaps;
for (int j = 0; j < m; j++) {
tmpMaps.push_back(str[j]);
if (str[j] == 'W') {
initbVisited[i][j] = true;
}
}
maps.push_back(tmpMaps);
}
int diri[] = { 1,-1,0,0 };
int dirj[] = { 0,0,1,-1 };
bVisited = initbVisited;
int gCount = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
bVisited = initbVisited;
if (maps[i][j] == 'L'&&bVisited[i][j]==false) {
queue<Point>q;
Point p;
p.i = i;
p.j = j;
p.cnt = 0;
//[i][j] = 't';
q.push(p);
// << endl;
//Prints(bVisited, n, m);
//cout << endl;
bVisited[i][j] = true;
while (!q.empty()) {
Point start = q.front();
q.pop();
for (int v = 0; v < 4; v++) {
int tmpDiri = start.i + diri[v];
int tmpDirj = start.j + dirj[v];
if (tmpDiri == -1 || tmpDirj == -1 || tmpDiri >= n || tmpDirj >= m||bVisited[tmpDiri][tmpDirj]==true|| maps[tmpDiri][tmpDirj]=='W') {
continue;
}
Point tmpP;
tmpP.i = tmpDiri;
tmpP.j = tmpDirj;
tmpP.cnt=start.cnt+1;
if (start.cnt + 1 > gCount) {
gCount = start.cnt + 1;
}
//cout << start.cnt + 1<<":"<<endl;
q.push(tmpP);
bVisited[tmpDiri][tmpDirj] = true;
//maps[tmpDiri][tmpDirj] = 't';
//cout << endl;
//Prints(bVisited, n, m);
//cout << endl;
}
}
}
}
}
cout << gCount;
return 0;
}