Codeforces Round #542(Div. 2) C.Connect
链接:https://codeforces.com/contest/1130/problem/C
题意:
给一个n*n的图,0表示地面,1表示水,给出起点和终点,
现要从起点到达终点,有一次在两个坐标间创立隧道的机会,消耗为(x1 - x2)^2 + (y1 - y1)^2。
求出最小的消耗,如果直接能走到,则消耗为0。
思路:
bfs求出起点和终点分别能到达的点,枚举每一种情况,取最小值即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int Next[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
const int MAXN = 50 + 5;
char Map[MAXN][MAXN];
int vis[MAXN][MAXN];
int n, r1, r2, c1, c2;
int Bfs()
{
queue<pair<int, int>> que;
vector<pair<int, int>> start;
vector<pair<int, int>> ends;
que.push(make_pair(r1, c1));
vis[r1][c1] = 1;
while (!que.empty())
{
int x = que.front().first;
int y = que.front().second;
start.push_back(make_pair(x, y));
if (x == r2 && y == c2)
return 0;
for (int i = 0;i < 4;i++)
{
int nx = x + Next[i][0];
int ny = y + Next[i][1];
if (nx < 1 || nx > n || ny < 1 || ny > n)
continue;
if (vis[nx][ny] || Map[nx][ny] == '1')
continue;
vis[nx][ny] = 1;
que.push(make_pair(nx, ny));
}
que.pop();
}
que.push(make_pair(r2, c2));
vis[r2][c2] = 1;
while (!que.empty())
{
int x = que.front().first;
int y = que.front().second;
ends.push_back(make_pair(x, y));
for (int i = 0;i < 4;i++)
{
int nx = x + Next[i][0];
int ny = y + Next[i][1];
if (nx < 1 || nx > n || ny < 1 || ny > n)
continue;
if (vis[nx][ny] || Map[nx][ny] == '1')
continue;
vis[nx][ny] = 1;
que.push(make_pair(nx, ny));
}
que.pop();
}
int res = 9999;
/*
for (int i = 0;i < start.size();i++)
cout << start[i].first << ' ' << start[i].second << endl;
cout << endl;
for (int i = 0;i < ends.size();i++)
cout << ends[i].first << ' ' << ends[i].second << endl;
cout << endl;
*/
for (int i = 0;i < start.size();i++)
{
for (int j = 0;j < ends.size();j++)
{
int cx = start[i].first - ends[j].first;
int cy = start[i].second - ends[j].second;
int cost = cx * cx + cy * cy;
res = min(res, cost);
}
}
return res;
}
int main()
{
cin >> n;
cin >> r1 >> c1 >> r2 >> c2;
for (int i = 1;i <= n;i++)
{
for (int j = 1; j <= n; j++)
cin >> Map[i][j];
}
cout << Bfs() << endl;
return 0;
}
Codeforces Round #542(Div. 2) C.Connect的更多相关文章
- Codeforces Round 542 (Div. 2)
layout: post title: Codeforces Round 542 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- Codeforces Round #542(Div. 2) CDE 思维场
C https://codeforces.com/contest/1130/problem/C 题意 给你一个\(n*m\)(n,m<=50)的矩阵,每个格子代表海或者陆地,给出在陆地上的起点终 ...
- Codeforces Round #542(Div. 2) B.Two Cakes
链接:https://codeforces.com/contest/1130/problem/B 题意: 给定n和 2 * n个数,表示i位置卖ai层蛋糕, 有两个人在1号,必须严格按照1-n的顺序买 ...
- Codeforces Round #542(Div. 2) A.Be Positive
链接:https://codeforces.com/contest/1130/problem/A 题意: 给n个数,找出一个非0整数d,使所有n个数除以整数d后,数组中正数的数量>= n/2. ...
- Codeforces Round #542(Div. 2) D1.Toy Train
链接:https://codeforces.com/contest/1130/problem/D1 题意: 给n个车站练成圈,给m个糖果,在车站上,要被运往某个位置,每到一个车站只能装一个糖果. 求从 ...
- Codeforces Round #542 (Div. 1) 题解
开学了住校了打不了深夜场 好难受啊QwQ A 显然对于每个起点,我们只需要贪心记录这个起点出发出去的糖果数量以及离自己最近的糖果 因为这个起点最后一次装载糖果一定是装载终点离自己最近的那个糖果 $ O ...
- Codeforces Round #542 Div. 1
A:显然对于起点相同的糖果,应该按终点距离从大到小运.排个序对每个起点取max即可.读题花了一年还wa一发,自闭了. #include<iostream> #include<cstd ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
随机推荐
- appium部分api
转自:http://www.aichengxu.com/view/41510 使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建 ...
- CSS3 弹性盒子(Flex Box) 微信小程序图片通栏
{{define "chkUrl"}} <!DOCTYPE html><html lang="zh-cmn-Hans"><head ...
- js获取三天后的日期
js获取三天后的日期 setDate getNowAddTreeFormatDate() { var date = new Date(); date.setDate(date.getDate()+3) ...
- thinkphp中的volist
在thinkphp中,使用volist一定要注意,<volist name='' id=''></volist>,name和id的变量一定要不一致,如果一致的话会导致当voli ...
- hihocoder 1082 然而沼跃鱼早就看穿了一切 (替换指定的串 )
#1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...
- POJ2955 Brackets —— 区间DP
题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- 一步一步学Silverlight 2系列(7):全屏模式支持
一步一步学Silverlight 2系列(7):全屏模式支持 概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言V ...
- sid, pid, gid
(一) 参考 :https://unix.stackexchange.com/questions/18166/what-are-session-leaders-in-ps 命令: ps xao pid ...
- oracle实例的内存(SGA和PGA)调整,优化数据库性能
一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...
- ${varname:-defaultvalue}
${varname:-defaultvalue}的意思是:如果varname存在且非null,则返回其值:否则,返回defaultvalue. 用途:如果变量未定义,则返回默认值.