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

谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)rust解法

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”,例如,图3-5中执行ARRBBL0后,效果如图3-6所示。
在这里插入图片描述
解法

use std::io;fn main() {let mut grid: Vec<Vec<char>> = vec![];for _i in 0..5 {let mut buf = String::new();io::stdin().read_line(&mut buf).unwrap();let cs = buf.trim().chars().collect();grid.push(cs);}println!("{:#?}", grid);let mut buf = String::new();io::stdin().read_line(&mut buf).unwrap();let cmds = buf.trim();println!("{}", cmds);let mut kong = (0, 0);for i in 0..5 {for j in 0..5 {if grid[i][j] == ' ' {kong = (i, j);break;}}}for i in cmds.chars() {match i {'a' => {if kong.0 < 1 {panic!("This puzzle has no final configuration");}let c = grid[kong.0 - 1][kong.1];grid[kong.0][kong.1] = c;grid[kong.0 - 1][kong.1] = ' ';kong = (kong.0 - 1, kong.1);}'b' => {if kong.0 >= 4 {panic!("This puzzle has no final configuration");}let c = grid[kong.0 + 1][kong.1];grid[kong.0][kong.1] = c;grid[kong.0 + 1][kong.1] = ' ';kong = (kong.0 + 1, kong.1);}'l' => {if kong.1 < 1 {panic!("This puzzle has no final configuration");}let c = grid[kong.0][kong.1 - 1];grid[kong.0][kong.1] = c;grid[kong.0][kong.1 - 1] = ' ';kong = (kong.0, kong.1 - 1);}'r' => {if kong.1 >= 4 {panic!("This puzzle has no final configuration");}let c = grid[kong.0][kong.1 + 1];grid[kong.0][kong.1] = c;grid[kong.0][kong.1 + 1] = ' ';kong = (kong.0, kong.1 + 1);}'0' => {break;}_ => {panic!("This puzzle has no final configuration");}}}println!("{:#?}", grid);
}
http://www.lryc.cn/news/195074.html

相关文章:

  • acwing算法基础之数据结构--双链表
  • 将中文名格式化输出为英文名
  • 设计模式_迭代器模式
  • 【数据结构】:栈的实现
  • 微前端一:技术选型
  • FPGA project : flash_continue_write
  • 论文阅读:Rethinking Range View Representation for LiDAR Segmentation
  • 本地配置免费的https咋做?
  • 微信小程序框架---详细教程
  • 【LeetCode刷题(数组and排序)】:存在重复元素
  • 半导体产业链解析:晶圆厂、无晶圆厂与代工厂的比较与作用
  • Apipost一键压测已支持导入CSV文件
  • RabbitMQ的5种模式——再探RabbitMQ的模式,简单、工作,发布订阅(广播),路由、主题 页面分析
  • 初识华为云数据库GaussDB for openGauss
  • 深圳寄包裹到德国
  • 系统架构师备考倒计时22天(每日知识点)Redis篇
  • 现有库存(on-hand inventory),库存水平(inventory level),库存位置(inventory position)
  • 智慧空开让用电更安全、管理更智能——电脑APP远程控制开合闸
  • PyTorch 中张量运算广播
  • Blender:使用立方体制作动漫头像
  • 【ppt技巧】ppt里的图片如何提取出来?
  • Python学习基础笔记七十三——调试程序
  • BOSHIDA DC电源模块关于电容器的电解液位置
  • 如何实现 Es 全文检索、高亮文本略缩处理(封装工具接口极致解耦)
  • C++多线程编程(第四章 案例1,C++11和C++17 多核并行计算样例)
  • 获取远程仓库的信息和远程分支的信息
  • QT学习day1
  • unity面试八股文 - 框架设计与资源管理
  • 智能网关IOT 2050采集应用
  • iOS代码混淆-从入门到放弃