当前位置:网站首页>[Wrong title] Circuit maintenance
[Wrong title] Circuit maintenance
2022-08-03 11:11:00 【wingaso】
WA代码
#include<bits/stdc++.h>
#define xx first
#define yy second
using namespace std;
typedef pair<int,int> pii;
const int N = 510;
string G[N];
int r,c;
int D[N][N];
const int d1[] = {
-1,-1,1, 1}; // 点
const int d2[] = {
-1, 1,1,-1};
const int k1[] = {
-1,-1,0, 0}; // 边
const int k2[] = {
-1, 0,0,-1};
const char kk[] = "\\/\\/";
int bfs(){
deque<pii> q;
memset(D,-1,sizeof D);
q.push_back({
0,0});
D[0][0] = 0;
while(!q.empty()){
int x = q.front().xx,y = q.front().yy;
q.pop_front();
if(x == r and y == c) break;
for(int i = 0;i < 4;i++){
int dx = x + d1[i],dy = y + d2[i];
int kx = x + k1[i],ky = y + k2[i];
if(dx < 0 or dy < 0 or dx > r or dy > c) continue;
if(~D[dx][dy]) continue;
if(G[kx][ky] == kk[i]){
D[dx][dy] = D[x][y];
q.push_front({
dx,dy});
}
else{
D[dx][dy] = D[x][y] + 1;
q.push_back({
dx,dy});
}
}
}
return D[r][c];
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int t; cin >> t;
while(t--){
cin >> r >> c;
for(int i = 0;i < r;i++) cin >> G[i];
cout << bfs() << endl;
}
return 0;
}
AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<deque>
#define xx first
#define yy second
using namespace std;
typedef pair<int,int> pii;
const int N = 510;
string G[N];
int r,c;
int D[N][N];
const int d1[] = {
-1,-1,1, 1}; // 点
const int d2[] = {
-1, 1,1,-1};
const int k1[] = {
-1,-1,0, 0}; // 边
const int k2[] = {
-1, 0,0,-1};
const char kk[] = "\\/\\/";
bool st[N][N];
int bfs(){
if((r + c) % 2) return -1;
deque<pii> q;
memset(D,0x3f,sizeof D);
memset(st,false,sizeof st);
q.push_back({
0,0});
D[0][0] = 0;
st[0][0] = true;
while(!q.empty()){
int x = q.front().xx,y = q.front().yy;
q.pop_front();
st[x][y] = true;
if(x == r and y == c) break;
for(int i = 0;i < 4;i++){
int dx = x + d1[i],dy = y + d2[i];
int kx = x + k1[i],ky = y + k2[i];
if(dx < 0 or dy < 0 or dx > r or dy > c) continue;
if(st[dx][dy]) continue;
if(G[kx][ky] == kk[i] and D[dx][dy] > D[x][y]){
D[dx][dy] = D[x][y];
q.push_front({
dx,dy});
}
else if(G[kx][ky] != kk[i] and D[dx][dy] > D[x][y] + 1){
D[dx][dy] = D[x][y] + 1;
q.push_back({
dx,dy});
}
}
}
return D[r][c];
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int t; cin >> t;
while(t--){
cin >> r >> c;
for(int i = 0;i < r;i++) cin >> G[i];
int res = bfs();
if(~res) cout << res << endl;
else cout << "NO SOLUTION" << endl;
}
return 0;
}
错误原因
错误原因是,Mistakenly believe that the distance when a point is updated for the first time must be the shortest distance.
这是一个假命题.
Because one point is taken from the queue at a time ( x , y ) (x,y) (x,y)时,will update its four adjacent points"距离".
当 D [ d x ] [ d y ] = D [ x ] [ y ] + 1 D[dx][dy] =D[x][y] + 1 D[dx][dy]=D[x][y]+1时,Still can not rule out being able to be from another distance D [ t x ] [ t y ] = D [ x ] [ y ] D[tx][ty] = D[x][y] D[tx][ty]=D[x][y]的点 ( t x , t y ) (tx,ty) (tx,ty),以 0 0 0的代价从 ( t x , t y ) (tx,ty) (tx,ty)走到 ( d x , d y ) (dx,dy) (dx,dy).
双端队列广搜,实际可以理解为dijkstra的简化版本.
Every time we update the distance,That is, a relaxation operation.
所以,we can imitate,Set the initial distance to (理论上的)无穷大,Then make the final obtained distance as the minimum distance in the update.
因此,这里不能使用DThe array is used as the basis for judging whether the distance of the node needs to be updated,We need to add a new state array s t st st.
边栏推荐
猜你喜欢
【二分查找详解外加递归写法】附有全部代码
Machine Learning (Chapter 1) - Feature Engineering
Cross-chain bridge protocol Nomad suffers hacker attack, losing more than $150 million
Programmers architecture practice way: software architecture basic concepts and thinking
Matplotlib
FR9811S6 SOT-23-6 23V,2A同步降压DC/DC转换器
SmobilerService 推送实现
程序员架构修炼之道:软件架构基本概念和思维
二叉搜索树(搜索二叉树)模拟实现(有递归版本)
深度学习100例——卷积神经网络(CNN)实现服装图像分类
随机推荐
LyScript 实现对内存堆栈扫描
build --repot
机器比人更需要通证
Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)
Fastjson反序列化
Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)
在 Chrome 开发者工具里通过 network 选项模拟网站的离线访问模式
STM32入门开发 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)
再谈“雷克萨斯”安全装置失效!安全手册疑点重重,网友:细思极恐
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
完全背包问题的思路解析
gbase在轨道交通一般都采用哪种高可用架构?
Who is more popular for hybrid products, depending on technology or market?
成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...
历史拉链数据处理有人做过吗
如何检索IDC研究报告?
fast planner中拓扑路径搜索
微信小程序获取用户手机号码
numpy
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持