首页 > 其他 > 详细

Puzzle, ACM/ICPC World Finals 1993, UVa227

时间:2015-09-22 14:50:30      阅读:428      评论:0      收藏:0      [点我收藏+]

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指
令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指
令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This
puzzle has no final configuration.”,例如,图3-5中执行ARRBBL0后,效果如图3-6所示。


技术分享

写的比较简陋,先写了容器,然后填充,写移动条件。

以下是用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;
}
~                                                                                  
~                                                                                  
~


本文出自 “9938713” 博客,请务必保留此出处http://9948713.blog.51cto.com/9938713/1696943

Puzzle, ACM/ICPC World Finals 1993, UVa227

原文:http://9948713.blog.51cto.com/9938713/1696943

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!