当前位置:网站首页>2022河南萌新联赛第(四)场:郑州轻工业大学 G - 迷宫
2022河南萌新联赛第(四)场:郑州轻工业大学 G - 迷宫
2022-08-03 03:50:00 【WA_自动机】
G - 迷宫
最短路问题,两两建边,如果目标点为花那么边权为 1 − 1 = 0 1-1=0 1−1=0 ,否则为 1 1 1 固定源点与汇点,最短路的各种算法都可以写,这道题用双端队列比较好写,但是我用的是优先队列。
优先队列
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef pair<int,PII> PIII;
const int N = 2010;
char g[N][N];
int f[N][N];
int n,m;
int dx[]={
0,1,0,-1};
int dy[]={
-1,0,1,0};
void bfs()
{
memset(f,0x3f,sizeof f);
f[1][1]=0;
priority_queue<PIII,vector<PIII>,greater<PIII> > Q;
Q.push({
0,{
1,1}});
while(Q.size())
{
PIII t=Q.top();Q.pop();
for(int i=0;i<4;i++)
{
int x=t.second.first+dx[i],y=t.second.second+dy[i];
if(x<1||x>n||y<1||y>m) continue;
if(g[x][y]=='#') continue;
if(f[x][y]!=0x3f3f3f3f) continue;
if(g[x][y]=='.') f[x][y]=min(f[x][y],f[t.second.first][t.second.second]+1);
if(g[x][y]=='*') f[x][y]=min(f[x][y],f[t.second.first][t.second.second]);
Q.push({
f[x][y],{
x,y}});
}
}
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>(g[i]+1);
bfs();
if(f[n][m]>=0x3f3f3f3f/2) cout<<"-1"<<endl;
else cout<<f[n][m]<<endl;
return 0;
}
双端队列
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N = 2010;
char g[N][N];
int f[N][N];
int n,m;
int dx[]={
0,1,0,-1};
int dy[]={
-1,0,1,0};
void bfs()
{
memset(f,0x3f,sizeof f);
f[1][1]=0;
deque<PII> Q;
Q.push_front({
1,1});
while(!Q.empty())
{
PII t=Q.front();Q.pop_front();
for(int i=0;i<4;i++)
{
int tx=t.first+dx[i],ty=t.second+dy[i];
if(tx<1||tx>n||ty<1||ty>m) continue;
if(g[tx][ty]=='#') continue;
int d=(g[tx][ty]=='.');
if(f[tx][ty]>f[t.first][t.second]+d)
{
f[tx][ty]=f[t.first][t.second]+d;
if(d==0) Q.push_front({
tx,ty});
else Q.push_back({
tx,ty});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>(g[i]+1);
bfs();
if(f[n][m]>=0x3f3f3f3f/2) cout<<"-1"<<endl;
else cout<<f[n][m]<<endl;
return 0;
}
边栏推荐
- 寄存器(内存访问)
- 高等代数_证明_矩阵乘以自身的转置的特征值不小于0
- 中原银行实时风控体系建设实践
- Chinese valentine's day??To the liver is the way!!!!!Auto. Js special position control method
- PyTorch installation - error when building a virtual environment in conda before installing PyTorch
- 金仓数据库 OCCI 迁移指南(5. 程序开发示例)
- 第三方支付--分账对接
- 肖sir ——自动化讲解
- Domino服务器SSL证书安装指南
- ClickHouse uninstall and reinstall
猜你喜欢
随机推荐
【剑指offer】——16.数值的整数次方
TCP 和UDP 的详细介绍
高等代数_笔记_配方法标准化二次型
leetcode刷题学习之路
Oracle EMCC可以独立安装吗?还是必须安装到数据库服务器上?
网工知识角|华为网络工程师,华为、华三、思科设备三层交换机如何使用三层接口?命令敲起来
Jincang Database Pro*C Migration Guide (3. KingbaseES Pr*oc Compatibility with Oracle Pro*c)
SM30 表维护视图数据保存前 数据校验事件
PyTorch installation - error when building a virtual environment in conda before installing PyTorch
ClickHouse卸载、重安装
肖sir_测试点
计组错题集
第三方支付--分账对接
硬件设计哪些事-PCB设计那些事
2022中国五金制品行业发展前景分析
MATLAB(5)绘图
Shell编程的条件语句
DOM破环和两个实验的复现
数字3d虚拟交互展厅顺应时代发展需求和趋势
Auto. Js scripts run time calculated Pro