UVa227 Puzzle
2016-06-25 20:04
288 查看
这题的坑点就是换行和交换时候都要检查一遍
下面上代码
#include<cstdio> #include<cstring> #include<iostream> using namespace std; char pic[10][10]; char order[100]; bool flag = false; bool isRange(int a){ if(a < 0 || a >=5){ flag = true; return false; } return true; } void solve(){ int x = 0, y = 0; for(int i = 0; i < 5; ++i){ for(int j = 0; j < 5; ++j){ if(pic[i][j] == ' '){ x = i; y = j; break; } } } for(int i = 0; order[i] != '0'; ++i){ char temp; if(order[i] == 'A'){ x--; if(!isRange(x)) break; swap(pic[x][y], pic[x + 1][y]); }else if(order[i] == 'R'){ y++; if(!isRange(y)) break; swap(pic[x][y], pic[x][y - 1]); }else if(order[i] == 'B'){ x++; if(!isRange(x)) break; swap(pic[x][y], pic[x - 1][y]); }else if(order[i] == 'L'){ y--; if(!isRange(y)) break; swap(pic[x][y], pic[x][y + 1]); } } } int main() { int T = 0; while(gets(pic[0])){ memset(order, 0, sizeof(order)); if(pic[0][0] == 'Z'){ break; } for(int i = 1; i < 5; ++i){ gets(pic[i]); } for(int i = 0; ; ++i){ scanf("%c", &order[i]); if(order[i] == '0') break; } getchar(); solve(); if (T++) printf("\n"); printf("Puzzle #%d:\n", T); if(flag){ printf("This puzzle has no final configuration.\n"); flag = false; continue; } for(int i = 0; i < 5; ++i){ printf("%c", pic[i][0]); for(int j = 1; j < 5; ++j){ printf(" %c", pic[i][j]); } printf("\n"); } } return 0; }
相关文章推荐
- 《C#高级编程》读书笔记(四):关于数组
- Linux中history历史命令使用方法详解【转载】
- leetcode 347. Top K Frequent Elements 解题报告
- JavaScript检测之basevalidate.js
- 移动混合开发之android文件管理新建文件和删除文件
- 系统视图
- JUnit软件测试技术(工具)和注解( Annotation )
- 中括号在正则表达式中的多义性
- 使用ffmpeg来转换media Video
- 一个最小可运行环境:一个简单脚本
- [LeetCode]problem 3. Longest Substring Without Repeating Characters
- java 什么时候使用内部类
- c#怎样利用this.Invoke()方法,用委托调用带参数的方法?new ParameterizedThreadStart()除外
- C++的初始化问题
- UVA - 489 Hangman Judge :模拟···WA了N次
- C#从文本文件中获取二维数组
- IT-I came here
- Instant Run requires 'Tools' | Android | Enable ADB integration' to be enabled
- 代理模式和面向切面编程
- JavaScript检测之basevalidate.js