The Morning after Halloween(待优化)

网址如下:

The Morning after Halloween - UVA 1601 - Virtual Judge (vjudge.net)

感觉自己和废物一样,除了用bfs啥都不会,顶多改改其中的细节

代码如下:

#include<cstdio>
#include<vector>
#include<cstring>
#include<cctype>
#include<queue>
using namespace std;const int maxwh = 16;
const int maxn = 3;
const int x[5]{-1, 1, 0, 0, 0};//上下左右停
const int y[5]{0, 0, -1, 1, 0};struct Node{int g_x[maxn], g_y[maxn], dist;Node():dist(0){memset(g_x, 0, sizeof(g_x)); memset(g_y, 0, sizeof(g_y));}
};vector<int> G[maxwh][maxwh];
char map[maxwh][maxwh];
int w, h, n, ans;
int vis[maxwh][maxwh][maxwh][maxwh][maxwh][maxwh];
int t_x[maxn], t_y[maxn];
queue<Node> q;
Node v;void init(void){memset(vis, 0, sizeof(vis));memset(t_x, 0, sizeof(t_x));memset(t_y, 0, sizeof(t_y));
}
void update_G(void){for(int i = 0; i < h; i++){for(int j = 0; j < w; j++){G[i][j].clear();if(map[i][j] != '#'){G[i][j].push_back(4);for(int m = 0; m < 4; m++){int _x = i + x[m], _y = j + y[m];if(_x >= 0 && _y >= 0 && _x < h && _y < w && map[_x][_y] != '#') G[i][j].push_back(m);}}}}
}
bool is_arrived(Node &u){for(int i = 0; i < n; i++)if(u.g_x[i] != t_x[i] || u.g_y[i] != t_y[i]) return false;return true;
}
void move(Node &u, int i){if(i == maxn){v.dist = u.dist + 1;bool is = true;//判断是否占用同一位置for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)if(is && v.g_x[i] == v.g_x[j] && v.g_y[i] == v.g_y[j]) is = false;//判断是否交换位置for(int i = 0; i < n; i++)for(int j = i + 1; j < n; j++)if(is && v.g_x[i] == u.g_x[j] && v.g_y[i] == u.g_y[j] && v.g_x[j] == u.g_x[i] && v.g_y[j] == u.g_y[i]) is = false;if(is) q.push(v);return;}if(i >= n){v.g_x[i] = v.g_y[i] = 0; move(u, i + 1);}else{vector<int> &tmp = G[u.g_x[i]][u.g_y[i]];for(auto it = tmp.begin(); it != tmp.end(); it++){v.g_x[i] = u.g_x[i] + x[*it];v.g_y[i] = u.g_y[i] + y[*it];move(u, i + 1);}}
}
void bfs(void){while(!q.empty()){Node u = q.front(); q.pop();if(vis[u.g_x[0]][u.g_y[0]][u.g_x[1]][u.g_y[1]][u.g_x[2]][u.g_y[2]] && u.dist > vis[u.g_x[0]][u.g_y[0]][u.g_x[1]][u.g_y[1]][u.g_x[2]][u.g_y[2]]) continue;vis[u.g_x[0]][u.g_y[0]][u.g_x[1]][u.g_y[1]][u.g_x[2]][u.g_y[2]] = u.dist;if(is_arrived(u)){ans = u.dist; break;}//移动move(u, 0);}while(!q.empty()) q.pop();
}int main(void)
{while(scanf("%d%d%d", &w, &h, &n) == 3 && w){getchar(); init();//输入地图Node tmp;for(int i = 0; i < h; i++){for(int j = 0; j < w; j++){char c = getchar(); map[i][j] = c;if(isupper(c)){t_x[c - 'A'] = i; t_y[c - 'A'] = j;}else if(islower(c)){tmp.g_x[c - 'a'] = i; tmp.g_y[c - 'a'] = j;}}getchar();}update_G();//更新空格图q.push(tmp);bfs();printf("%d\n",ans);}return 0;
}

这题比较炸裂的一点在于,移动的点可以高达3个,一次可以延申出来的状态有5*5*5 = 125个

纵使题目表明有很多障碍,可以延申出来的状态也是很多

同时,我已经根据给出的地图重新建立了一个图(就是那个G数组)来记录该点合法的移动方向,但是最后还是超时了

但是状态的记录倒是没多大问题,因为地图很小,纵使使用占用内存最大的哈希表也不会让内存爆炸

说是可以换一个算法,比如双向广度优先搜索,但是我感觉这玩意对效率的提升并没有什么帮助(话虽如此,我也还没有尝试)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6000元最好的家用投影仪:当贝X5S Pro六千元配置最高画质最强

数码家电品牌发展迅速&#xff0c;投影同样也是一种更新迭代较快的产品类型&#xff0c;有时候去年还比较火的产品&#xff0c;今年就会被别的产品取代&#xff0c;就比如之前灯泡投影一直被认为是好产品的代表&#xff0c;但是现在国产激光投影的销量反而更高。一般来说6000元…

容易涨粉的视频素材在哪找啊?爆款涨粉的视频素材网站有这几个

亲爱的读者&#xff0c;大家好&#xff01;今天我们要探讨一个至关重要的问题&#xff1a;在充满竞争的视觉时代&#xff0c;如何使自己的短视频脱颖而出并吸引更多粉丝&#xff1f;关键在于使用那些既酷炫又高质量的视频素材&#xff01;下面就向大家推荐几个顶级视频素材网站…

Mysql笔记-v2

零、 help、\h、? 调出帮助 mysql> \hFor information about MySQL products and services, visit:http://www.mysql.com/ For developer information, including the MySQL Reference Manual, visit:http://dev.mysql.com/ To buy MySQL Enterprise support, training, …

冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序大讲解

冒泡排序 原理讲解&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它的基本思想是重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&…

永磁同步电机无速度算法--滑模观测器(反正切、反余弦)

一、原理介绍 在永磁同步电机滑模观测器控制中&#xff0c;转子的位置和转速信息与反动电势密切相关。滑模观测器控制基本设计思路是&#xff1a;利用永磁同步电机的电压、电流信息&#xff0c;通过永磁同步电机数学模型&#xff0c;估算出电机在两相静止坐标系中的反电动势信…

python中flask服务数据,客户端接收到中文乱码

问题&#xff1a;使用flask框架开发web服务。客户端接收到数据后&#xff0c;发现中文乱码 问题原因剖析&#xff1a;数据服务端打印出来&#xff0c;中文显示正常。客户端接收到数据&#xff0c;以json方式打开&#xff0c;中文也是正常的&#xff0c;以text或content打开&am…

最优化方法 运筹学【】

1.无约束 常用公式 线搜索准则&#xff1a;求步长 精确线搜索&#xff08;argmin&#xff09; 最速下降&#xff1a;sd&#xff1a;线性收敛 2.算法 SD dk&#xff1a;付梯度-g newton dk&#xff1a;Gkd-g 二阶收敛&#xff0c;步长为1 阻尼牛顿&#xff1a;步长用先搜…

mmaction2版本适配(Linux)

从cuda到mmcv保姆式教程 &#xff08;数十年踩坑经验&#xff0c;跟着我做&#xff0c;版本不会错~&#xff09; 如果有补充&#xff0c;请评论区评论&#xff0c;后续填坑&#xff01; cuda11.3 下载安装包 wget https://developer.download.nvidia.com/compute/cuda/11.3…

iOS 开发者的 Flutter 入门课

作为一名 iOS 开发者&#xff0c;入门 Flutter 需要了解一些新的工具和概念&#xff0c;但也能利用你已有的知识和技能。以下是一个详细的入门指南&#xff0c;帮助你快速上手 Flutter&#xff1a; 1. 环境设置 首先&#xff0c;你需要设置开发环境。 安装 Flutter SDK 前往…

如何理解李彦宏说的“不要卷模型,要卷应用”

如何理解李彦宏说的“不要卷模型&#xff0c;要卷应用” 7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举办。在产业发展主论坛上&#xff0c;百度创始人、董事长兼首席执行官李彦宏呼吁&#xff1a;“大家不要卷模型&#xff0…

第九篇——军形篇:先胜后战,赢了再打

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 微观层面的&#xff0c;洞察千里之外&#xff1b;提前预防以做到规避风险…

产品经理-的职业发展(9)

找一份好工作&#xff0c;就是为了获得更好的职业发展&#xff0c;下面分别给大家介绍下大、中、小型公司的职业发展路径 中小型公司 中小型公司的规模往往相对不大&#xff0c;又处于飞速发展过程中&#xff0c;培养体系和晋升标准都不够成熟&#xff0c;所以实际的职业发展路…

阿里开源语音理解和语音生成大模型FunAudioLLM

近年来&#xff0c;人工智能&#xff08;AI&#xff09;的进步极大地改变了人类与机器的互动方式&#xff0c;例如GPT-4o和Gemin-1.5等。这种转变在语音处理领域尤为明显&#xff0c;其中高精度的语音识别、情绪识别和语音生成等能力为更直观、更类人的交互铺平了道路。阿里开源…

C++层视频帧转换成Java层Bitmap

C 层&#xff1a;处理视频帧并返回文件描述符 获取视频帧并处理&#xff1a;在 C 层使用 ffmpeg 或其他库提取视频帧并进行处理。将处理后的帧保存到文件&#xff1a;将处理后的帧保存到临时文件&#xff0c;并返回该文件的文件描述符。 #include <jni.h> #include <…

【Linux】进程间通信——匿名管道

为什么要进行进程间通信&#xff1f; 1.数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程&#xff0c;比如我们有两个进程&#xff0c;一个负责获取数据&#xff0c;另一个负责处理数据&#xff0c;这时第一个进程就要将获取到的数据交给第二个进程 2.资源共享&…

K8s驱逐场景以及规避方案参考 —— 筑梦之路

Pod 驱逐分为两种情况&#xff1a; 较安全驱逐 & 提高稳定性的良性驱逐 API 发起驱逐&#xff0c;典型案例&#xff1a;kubectl drain Node Not Ready 时&#xff0c;Controller Manager 发起的驱逐 有风险的驱逐 节点压力驱逐 节点磁盘空间不足、内存不足 或 Pid 不足&…

【Threejs进阶教程-着色器篇】3. Uniform的基本用法2与基本地球昼夜效果

Uniform的基本用法2 关于本Shader教程前两篇地址&#xff0c;请按顺序学习本篇使用到的资源用uniform传递纹理代码分析texture类型的uniform在shader中接收uniformtexture2D()处理图片压缩修改wrapS和wrapT 切换成夜景效果切换Mix() 昼夜切换升级改动代码效果分析解决球体分界线…

2024.7.8

2024.7.8 【追逐影子的人&#xff0c;自己就是影子 —— 荷马】 Monday 六月初三 讲的根本听不懂好吧&#xff01; 目前只写了三道题&#xff08;但是黑色 确实是没见过这么抽象的数据结构 Gregor and the Two Painters Number of Components Equal LCM Subsets 这个lcm确实…

医疗器械网络安全| 常见安全漏洞与防护措施

医疗器械网络安全顾问​https://link.zhihu.com/?targethttps%3A//www.wanyun.cn/Support%3Fshare%3D24315_ea8a0e47-b38d-4cd6-8ed1-9e7711a8ad5e 一、常见安全漏洞 医疗器械软件在现代医疗体系中扮演着至关重要的角色&#xff0c;然而&#xff0c;随着技术的不断发展&…

关于centos7自带的nginx1.20.1开启https后,XP系统的IE6和IE8无法显示网页的问题

CentOS7自带的nginx-1.20.1是支持HTTP/2和TLS1.3的。 软件包名称&#xff1a;nginx-1.20.1-10.el7.x86_64 CentOS7默认开启了HTTP/2&#xff0c;但没有开启TLS1.3&#xff0c;以及IE6和IE8的https访问。 开启方法&#xff1a; ssl_ciphers HIGH:!aNULL:!MD5;改为ssl_ciphers…