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;
}

 

'알고리즘 공부' 카테고리의 다른 글

백준 잃어버린 괄호  (0) 2023.07.20
백준 A->B  (0) 2023.07.19
백준 동전0  (0) 2023.07.18
백준 서강근육맨  (0) 2023.07.18
백준 ATM  (0) 2023.07.18

+ Recent posts