当前位置:网站首页>[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.
边栏推荐
- What is a smart contract?
- [错题]电路维修
- Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
- Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
- MATLAB Programming and Applications 2.6 Strings
- QT with OpenGL(HDR)
- 面试官:工作两年了,这么简单的算法题你都不会?
- Dva.js 新手入门指南
- 2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
- ARIMA实现(亲测可用)
猜你喜欢
随机推荐
LeetCode 899 有序队列[字典序] HERODING的LeetCode之路
【二分查找详解外加递归写法】附有全部代码
关于OPENSSL的问题
The way of programmer architecture practice: how to design a sustainable evolution system architecture?
Analysis of the idea of the complete knapsack problem
【网络原理的概念】
Polymorphism in detail (simple implementation to buy tickets system simulation, covering/weight definition, principle of polymorphism, virtual table)
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题
成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...
创建C UDR时,指定的HANDLESNULLS的作用是什么?
Web Server 设置缓存响应字段的一些推荐方案
ABAB-740新语法
"Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support
如何改变sys_guid() 返回值类型
XDR平台架构与关键技术解析
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
完全背包问题的思路解析
苏州大学:从PostgreSQL到TDengine
MATLAB Programming and Applications 2.6 Strings
如何将Oracle/MySQL中的数据迁移到GBase 8c中?




![LeetCode 899 有序队列[字典序] HERODING的LeetCode之路](/img/95/1b63cfb25b9e0802666114f089fcb8.png)




