UVa227-Puzzle
来源:互联网 发布:二十四小时软件 编辑:程序博客网 时间:2024/06/03 21:29
UVa227-Puzzle
思路:
题意是有个5x5的板子上面有一个是空的,用空格表示,四种操作分别是ABRL,分别代表把空格上下右左的字母移动到空格处,然后给出一个初始状态,还有一系列操作输出最终状态,如果存在非法操作输出This puzzle has no final configuration.
,非法操作就是越界的操作(比如空格已经在最右边了还要执行R就非法)。
这种模拟题一直都是最不愿意做的,因为细节比较多我经常会考虑不全面。
说一下坑点吧:
- 要用gets输入因为有空格
- 注意指令后面的换行要用getchar吃掉(大多数字符串题目都要考虑的)
- 如果空格在末尾是没有的,要判断一下长度是不是空格在末尾
代码:
#include <bits/stdc++.h>using namespace std;char mn[6][6];int judge(int &a,int &b,int x,int y){ int px=a+x; int py=b+y; if(px>=0&&px<5&&py>=0&&py<5) { mn[a][b]=mn[px][py]; mn[px][py]=' '; a=px;b=py; return 1; } return 0;}int main(){ int kx,ky,k=1; while(1) { for(int i=0;i<5;i++) { gets(mn[i]); if(strlen(mn[i])==4) { mn[i][4]=' '; mn[i][5]=0; } for(int j=0;j<5;j++) { if(mn[i][j]=='Z') return 0; if(mn[i][j]==' '){kx=i;ky=j;} } } char ch;int flag=1; while(scanf("%c",&ch),ch!='0') { int px,py; switch(ch) { case 'A': if(flag)flag=judge(kx,ky,-1,0); break; case 'B': if(flag)flag=judge(kx,ky,1,0); break; case 'L': if(flag)flag=judge(kx,ky,0,-1); break; case 'R': if(flag)flag=judge(kx,ky,0,1); break; default : ; } } getchar(); if(k>1)printf("\n"); printf("Puzzle #%d:\n",k++); if(flag) for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { printf("%c%c",mn[i][j],j==4?'\n':' '); } } else printf("This puzzle has no final configuration.\n"); } return 0;}
阅读全文
0 0
- Uva227 - Puzzle
- Uva227.Puzzle
- UVA227-Puzzle
- UVa227 Puzzle
- uva227 - Puzzle
- Puzzle,UVa227
- uva227 - Puzzle
- [UVA227]Puzzle
- UVA227 puzzle
- UVa227 Puzzle
- UVA227 Puzzle
- UVa227 Puzzle
- UVa227:Puzzle
- UVa227 Puzzle
- UVa227 - Puzzle
- Uva227-Puzzle
- uva227 puzzle
- UVa227-Puzzle
- DK2的装机演示+疑难处理(多图)
- 如何搭建内容运营框架?
- Gym 100960B B. Forcefield
- Unix中的文件IO
- leetcode 173. Binary Search Tree Iterator
- UVa227-Puzzle
- 51Nod 1256 乘法逆元
- [HDU
- Shortest Prefixes 字典树模板
- 循环节之简单枚举
- SDIO笔记
- 【Solr】深入浅出Solr(二)——搭建单机服务
- eclipse基础设置 提高开发速度和质量
- QS Network 【zoj-1586】【最小生成树】