(UVA)227
来源:互联网 发布:域名cname解析过程 编辑:程序博客网 时间:2024/05/02 18:25
题意:有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”。Z表示输入结束。
分析:这题格式需要尤其注意,以及注意非法指令的判断。
我的代码没有下面这个代码优秀,贴出一个思路非常好的代码:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const char inst[] = "ABLR";const int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int main(void){ int t = 0; char s[5][6]; char c; while ((s[0][0] = getchar()) != 'Z') { int bi = 0, bj = 0; for (int i = 0; i < 5; i ++) { for (int j = 0; j < 5; j ++) { if (!i && !j) continue; s[i][j] = getchar(); if (s[i][j] == ' ') {bi = i, bj = j;} } getchar(); } bool legal = true; while ((c = getchar()) != '0') { if (legal == false || c == '\n') continue; int k; for (k = 0; k < 4; k ++) { if (c == inst[k]) break; } if (k == 4) legal = false; else { int ni = bi+dir[k][0], nj = bj+dir[k][1]; if (0 <= ni && ni < 5 && 0 <= nj && nj < 5) { swap(s[bi][bj], s[ni][nj]); bi = ni, bj = nj; } else legal = false; } } if (++t > 1) printf("\n"); printf("Puzzle #%d:\n", t); if (legal == false) printf("This puzzle has no final configuration.\n"); else { for (int i = 0; i < 5; i ++) { for (int j = 0; j < 5; j ++) { printf("%c%c", s[i][j], j == 4 ? '\n' : ' '); } } } getchar(); } return 0;}
0 0
- (UVA)227
- UVa 227 Puzzle(谜题)
- UVa 227 Puzzle(拼图游戏)
- (入门)uva 227 Puzzle
- 题解:谜题(UVa 227)
- UVA 227
- uva 227
- UVa 227
- UVA-227
- UVA 227
- UVA-227
- UVA 227
- UVA 227
- uva 227
- UVA 227
- UVA 227
- UVa 227
- uva 227
- Java之回调
- Zookeeper(十)Watcher——数据变更的通知
- 正则表达式 常用
- (Java学习笔记9)递归的应用
- 双向链表的插入以及删除
- (UVA)227
- 四则表达式计算(stl stack, 不带注释)
- Linux 关于S权限和T权限的介绍
- qt的环境搭建(二)Qt Creator
- 随笔经验,记录
- 洛谷 1199 三国游戏
- 进程与线程的一个简单解释
- mysql主从复制延迟问题
- [转]PAT甲级练习1099. Build A Binary Search Tree (30)