Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
using namespace std; int n, m; char mat[101][101]; int bfs(pair
S, pair
E) { int si = S.first, sj = S.second; int ei = E.first, ej = E.second; queue
q; q.push(si); q.push(sj); q.push(0); vector
> visited(n, vector
(m, false)); visited[si][sj] = true; while(!q.empty()) { int ci = q.front(); q.pop(); int cj = q.front(); q.pop(); int dist = q.front(); q.pop(); if(ci == ei and cj == ej) { return dist; } if(ci + 1 < n and mat[ci + 1][cj] != '#' and !visited[ci + 1][cj]) { q.push(ci + 1); q.push(cj); q.push(dist + 1); visited[ci + 1][cj] = true; } if(ci - 1 >= 0 and mat[ci - 1][cj] != '#' and !visited[ci - 1][cj]) { q.push(ci - 1); q.push(cj); q.push(dist + 1); visited[ci - 1][cj] = true; } if(cj + 1 < m and mat[ci][cj + 1] != '#' and !visited[ci][cj + 1]) { q.push(ci); q.push(cj + 1); q.push(dist + 1); visited[ci][cj + 1] = true; } if(cj - 1 >= 0 and mat[ci][cj - 1] != '#' and !visited[ci][cj - 1]) { q.push(ci); q.push(cj - 1); q.push(dist + 1); visited[ci][cj - 1] = true; } } return 1e8; } int main() { cin >> n >> m; pair
S, E; vector
> drinks; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> mat[i][j]; if(mat[i][j] == 'S') { S = make_pair(i, j); } if(mat[i][j] == 'B') { E = make_pair(i, j); } if(mat[i][j] == 'D') { drinks.push_back(make_pair(i, j)); } } } int res = 2e9; if(drinks.size() == 1) { res = bfs(S, drinks[0]) + bfs(drinks[0], E); } else if(drinks.size() == 2) { res = bfs(S, drinks[0]) + bfs(drinks[0], drinks[1]) + bfs(drinks[1], E); res = min(res, bfs(S, drinks[1]) + bfs(drinks[1], drinks[0]) + bfs(drinks[0], E)); } else { res = bfs(S, drinks[0]) + bfs(drinks[0], drinks[1]) + bfs(drinks[1], drinks[2]) + bfs(drinks[2], E); res = min(res, bfs(S, drinks[0]) + bfs(drinks[0], drinks[2]) + bfs(drinks[2], drinks[1]) + bfs(drinks[1], E)); res = min(res, bfs(S, drinks[1]) + bfs(drinks[1], drinks[0]) + bfs(drinks[0], drinks[2]) + bfs(drinks[2], E)); res = min(res, bfs(S, drinks[1]) + bfs(drinks[1], drinks[2]) + bfs(drinks[2], drinks[0]) + bfs(drinks[0], E)); res = min(res, bfs(S, drinks[2]) + bfs(drinks[2], drinks[0]) + bfs(drinks[0], drinks[1]) + bfs(drinks[1], E)); res = min(res, bfs(S, drinks[2]) + bfs(drinks[2], drinks[1]) + bfs(drinks[1], drinks[0]) + bfs(drinks[0], E)); } if(res > 1e8) { res = -1; } cout << res << endl; return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)