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连试试水的深浅..... ...
随机推荐
- VMWare 14 Workstation Pro 下载与安装
1.双击安装运行 2.下一步 3.接受 下一步 4.自定义安装路径,下一步 5.下一步,取消勾选加入vmware客户体验 6.下一步 7.安装 8.安装中 9.完成 10.点击许可证安装 输入:FF3 ...
- Android如果动态改变CursorAdapter Item个数
//adapter内部类 private class SearchAdapter extends CursorAdapter { @Override public View newView(Conte ...
- Python调用C/Fortran混合的动态链接库--上篇
内容描述: 在32位或64位的windows或GNU/Linux系统下利用Python的ctypes和numpy模块调用C/Fortran混合编程的有限元数值计算程序 操作系统及编译环境: 32bit ...
- PyOpenGL下GlutBitmapCharacter的替代
虽然pyinstaller支持pyopengl,但是调用GLUT之后,在其它电脑上面运行就会出现错误,索性按照之前C#上面的办法,把字体数据和函数用python重写 fontData.py #! /u ...
- sublime 中配置 python 运行
运行是按快捷键 ”ctrl + B“ Preferences->Browse Packages->Python->Python.sublime-build 编辑这个文件. 修改成 ...
- Kills all phantomjs instances, disregard of their origin python关闭进程
Python/Linux quit() does not terminate PhantomJS process · Issue #767 · SeleniumHQ/selenium https:// ...
- 使用POCO发送HTTP(S)请求
POCO GitHub地址https://github.com/pocoproject/poco http_example.cpp #include <iostream> #include ...
- DOM操作二
1.创建节点 createElement(): 创建新的Element节点 var s = document.createElement('script'); createTextNode(): ...
- (31)java web的hibernate使用-一级缓存,二级缓存
参考:https://blog.csdn.net/miachen520/article/details/52195832 hibernate自带一级缓存 和 二级缓存 一,一级缓存: 基于Sessio ...
- YTU 2577: 小数计算——结构体
2577: 小数计算--结构体 时间限制: 1 Sec 内存限制: 128 MB 提交: 978 解决: 647 题目描述 小数可以看成是一个点和两个数组成的,因此可以定义成一个小数的结构体,现在 ...