Puzzle, ACM/ICPC World Finals 1993, UVa227
2015-09-22 07:42
387 查看
有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指
令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指
令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This
puzzle has no final configuration.”,例如,图3-5中执行ARRBBL0后,效果如图3-6所示。
![](http://s3.51cto.com/wyfs02/M00/73/84/wKioL1YAkvujuoBXAAEPEok7qG0886.jpg)
写的比较简陋,先写了容器,然后填充,写移动条件。
以下是用C写的源码:
令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指
令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This
puzzle has no final configuration.”,例如,图3-5中执行ARRBBL0后,效果如图3-6所示。
![](http://s3.51cto.com/wyfs02/M00/73/84/wKioL1YAkvujuoBXAAEPEok7qG0886.jpg)
写的比较简陋,先写了容器,然后填充,写移动条件。
以下是用C写的源码:
#include<stdio.h> #include<string.h> int main() { char net[7][7],c=65,ch;int i,j; memset(net,32,sizeof net); for(i=1;i<6;i++) for(j=1;j<6;j++) net[i][j]=(c++); net[5][5]=42; int x=5,y=5,temp; do{ while((c=getchar())!=EOF&&(c==65||c==66||c==76||c==82)) { if(x>0&&x<7&&y<7&&y-1>0&&c==65) {temp=net[y][x];net[y][x]=net[y-1][x];net[y-1][x]=temp;y--;} if(x>0&&x<7&&y>0&&y+1<7&&c==66) {temp=net[y][x];net[y][x]=net[y+1][x];net[y+1][x]=temp;y++;} if(x-1>0&&x<7&&y>0&&y<7&&c==76) {temp=net[y][x];net[y][x]=net[y][x-1];net[y][x-1]=temp;x--;} if(x>0&&x+1<7&&y>0&&y<7&&c==82) {temp=net[y][x];net[y][x]=net[y][x+1];net[y][x+1]=temp;x++;} } if(c!=65&&c!=66&&c!=76&&c!=82) printf("The puzzle has no final configuration.\n"); for(i=0;i<7;i++) {for(j=0;j<7;j++) printf("%c",net[i][j]);printf("\n");} }while(c!='q'); return 0; } ~ ~ ~
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例