当前位置: 首页 > news >正文

Atcoder C - Routing

https://atcoder.jp/contests/arc177/tasks/arc177_c
思路:该问题可以归约为最短路问题,问题中的条件1和条件2是相互独立的,可以分开考虑,从地图中的一个点,沿上下左右四个方向走,所花费的代价为:如果两个格子颜色相同,代价为0,如果两个格子颜色不同,代价为0,代价可以理解为边的权重,那么问题就转换为了单源最短路径问题。
可以使用SPFA算法求解。

#include<bits/stdc++.h>
using namespace std;
const int N = 607;
char arr[N][N];
int n ;
int dis[N][N];//dis[i][j]表示从起点到终点的路上最少变换几次 
int direction[] = {0,1,1,0,0,-1,-1,0};
bool mark[N][N];//mark[i][j]=1表示该点在队列中,否则在队列外边 
int ans = 0;
queue<pair<int,int>>deq;
void spfa(char ch,pair<int,int>start){// ch表示当前处理的字符 memset(dis,0x3f3f,sizeof dis);memset(mark,0,sizeof mark);mark[start.first][start.second] = 1; dis[start.first][start.second] = 0;deq.push(start);while(deq.size()){auto u = deq.front();deq.pop();mark[u.first][u.second] = 0;int now = dis[u.first][u.second]; for(int i = 0;i<8;i+=2){int x = u.first + direction[i];int y = u.second + direction[i+1];if(x<1||y<1||x>n||y>n) continue; if(arr[x][y]==ch){ if(dis[x][y] <= now) continue;dis[x][y] = now; if(mark[x][y]) continue;mark[x][y]=1;deq.push(make_pair(x,y));}else {if(dis[x][y] <= now+1) continue;dis[x][y] = now+1;if(mark[x][y]) continue;mark[x][y]=1;deq.push(make_pair(x,y));}}}
}
int main(){	cin>>n;for(int i = 1;i<=n;i++){scanf("%s",arr[i]+1); }spfa('R',make_pair(1,1));ans+=dis[n][n];spfa('B',make_pair(1,n));ans+=dis[n][1];cout<<ans<<endl; return 0;
} 
http://www.lryc.cn/news/348229.html

相关文章:

  • 升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)
  • 【大数据】containered学习笔记
  • 「TypeScript」TypeScript入门练手题
  • k8s 使用Docker和Containerd对比分析
  • MySQL 通过 systemd 启动时 hang 住了……
  • pat乙1033-旧键盘打字
  • Ubuntu安装VScode
  • c# - - - winform程序四个角添加圆角效果
  • Springboot 集成 Consul 实现服务注册中心-05
  • 【软考高项】四十六、项目管理科学计算之运筹学
  • 使用 Python 和 OpenCV 进行实时目标检测的详解
  • Android build.prop生成过程源码分析
  • 计算机网络教材——谢希仁教材与配套PPT课件和《计算机网络——自顶向下方法》
  • mysql 离线安装
  • 【C++】 string类:应用与实践
  • 巩固学习7
  • Android 右键 new AIDL 无法选择
  • 使用Springboot整合Elasticsearch
  • Vue3+Element+TS动态菜单+按钮权限控制实现探索
  • 五款公司源代码加密软件推荐|代码防泄密解决方案
  • 【spring】Security 密码加密算法
  • IO系列(一) -一文带你读懂 java 中的IO流!
  • 代码随想录算法训练营第六天| 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
  • 【python】中的可迭代对象、迭代器、生成器
  • 短视频矩阵系统源码/saas--总后台端、商户端、代理端、源头开发
  • K8s:二进制安装k8s(单台master)
  • C++类和对象下——实现日期类
  • 252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波
  • SSIM(Structural Similarity),结构相似性及MATLAB实现
  • 第十六章-消费者-PUSH方式(一)