UVa 227 Puzzle
2015-12-12 21:18
274 查看
原题链接
#include <stdio.h> #include <string.h> #define maxn 1010 char s[5][5], c, s1[maxn]; int cases = 0, i, j, col, row, first = 1, bad;//bad=1表示越界溢出 void swap(char *a, char *b) { char t = *a; *a = *b; *b = t; } int panduan(int col, int row)//判断行列是否越界 { if (col < 0 || col>4 || row < 0 || row>4) return 1; return 0; } void move(char c) { if (c == 'A') { if (!panduan(col - 1, row)) { swap(&s[col][row], &s[col - 1][row]); col--; } else bad = 1; } else if (c == 'B') { if (!panduan(col + 1, row)) { swap(&s[col][row], &s[col + 1][row]); col++; } else bad = 1; } else if (c == 'L') { if (!panduan(col, row - 1)) { swap(&s[col][row], &s[col][row - 1]); row--; } else bad = 1; } else if (c == 'R') { if (!panduan(col, row + 1)) { swap(&s[col][row], &s[col][row + 1]); row++; } else bad = 1; } } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); while (1) { gets(s[0]); if (s[0][0] == 'Z'&&s[0][1] == '\0') break; bad = 0; for (i = 1;i <= 4;i++) gets(s[i]); for (i = 0;i < 5;i++) for (j = 0;j < 5;j++) if (s[i][j] == ' ') {//col,row分别保存空格所在行列 col = i; row = j; break; } while (1) { gets(s1); int len = strlen(s1); for (i = 0;i < len - 1;i++) { move(s1[i]); if (bad) break; } if (bad) break; if (s1[len - 1] == '0') break; else move(s1[len - 1]); } if (first) first = 0; else putchar('\n'); printf("Puzzle #%d:\n", ++cases); if (bad) printf("This puzzle has no final configuration.\n"); else { for (i = 0;i < 5;i++) { for (j = 0;j < 5;j++) { if (j) putchar(' '); putchar(s[i][j]); } putchar('\n'); } } } return 0; }
相关文章推荐
- cocos2d-x增加控制台程序代码
- 一个简单的抓包代码
- C#_异常捕捉
- linux定时执行php脚本
- 20151212Jquery 工具函数代码备份
- Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
- 用Kotlin语言重新编写Plaid APP:经验教训(I)
- 南燕新闻自动生成软件——scrapy爬虫程序
- Java内部类
- 骑士飞行棋第三版(上色)
- Maven中插件更新失败,终极解决办法
- MyEclipse使用SVN进行项目版本控制
- ANSI、ASCII、GB2312、GBK
- 轻松学习JavaScript十五:JavaScript之BOM简介
- 关于Http协议(2)--转载
- Mac 上配置LNMP教程
- 无法创建AVD_20151212
- Eddy's 洗牌问题
- (八十七)break和continue语句、以及goto语句
- 算法学习:快速排序