当前位置:网站首页>[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.
边栏推荐
- 【多线程的相关内容】
- LP流动性挖矿DAPP系统开发丨流动性挖矿功能原理及说明
- [Explanation of JDBC and inner classes]
- C#+WPF 单元测试项目类高级程序员必知必会
- MATLAB programming and application 2.7 Structural data and unit data
- ScrollView嵌套RecyclerView滚动冲突
- 二叉搜索树(搜索二叉树)模拟实现(有递归版本)
- numpy
- 苏州大学:从PostgreSQL到TDengine
- 在安装GBase 8c数据库的时候,报错显示“Host ips belong to different cluster”。这是为什么呢?有什么解决办法?
猜你喜欢

Matplotlib

complete knapsack problem

MySQL数据库实战(1)

二叉搜索树(搜索二叉树)模拟实现(有递归版本)

怎么在外头使用容器里php命令

Matplotlib

科普大佬说 | 黑客帝国与6G有什么关系?

Programmers architecture practice way: software architecture basic concepts and thinking

For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received

Classical Architecture and Memory Classification of Embedded Software Components
随机推荐
通过GBase 8c Platform安装数据库集群时报错
机器比人更需要通证
509. 斐波那契数
FR9811S6 SOT-23-6 23V,2A同步降压DC/DC转换器
机器学习(第一章)—— 特征工程
SmobilerService 推送实现
What is the ERC20 token standard?
BPMN和DMN基本概念和使用案例
RecyclerView的item高度自适应
Fastjson反序列化
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
oracle计算同、环比
混动产品谁更吃香,看技术还是看市场?
深度学习经典网络 -- Inception系列(稀疏结构)
Spinner文字显示不全解决办法
LeetCode 899 有序队列[字典序] HERODING的LeetCode之路
【冒泡排序以及奇数偶数排列】
fast planner中拓扑路径搜索
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
mysql数据库定时备份占用大量线程,导致全局锁表,有啥好的解决方法么