题目描述
小童是一个喜欢数字华容道的女生。 数字华容道游戏是一种最早的滑块类游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等。十五数字华容道游戏的板上会有十五个方块和一个大小相当于一个方块的空位(供方块移动之用)。而八数字华容道游戏,为九宫格布局,有八个方块和一个空位(如图1)。
在小童十岁生日的当天,小童的叔叔送给了她一块八数字华容道游戏作为生日礼物。
在送给小童之前,叔叔打乱了这块华容道,想要小童还原它。
聪明的小童当然立刻就还原了,并且还记下了还原的过程。
第二天上学的时候,小童告诉了你她还原的过程,想要学习信息学竞赛的你编写一个程序回答她,叔叔送她的华容道在小童开始还原之前是什么样的。
具体的,小童还原一共有 n 步,每一步可以用一个字符表示:
第i个字符如果是‘L’,则表示小童第i次是把空位左边的块移到了空位;
第i个字符如果是‘R’,则表示小童第i次是把空位右边的块移到了空位;
第i个字符如果是‘U’,则表示小童第i次是把空位上边的块移到了空位;
第i个字符如果是‘D’,则表示小童第i次是把空位下边的块移到了空位。
另外,小童是一个诚实的孩子,所以她告诉你的还原过程一定是合法的。
输入
输出
三行三个整数,每行两个整数之间有一个空格,表示华容道一开始的样子,空位的位置用0填充。
样例输入 Copy
4 LURD
样例输出 Copy
1 2 3 4 8 5 7 6 0
提示
对于10% 的数据,n=0;
对于30% 的数据,n≤1;
另有30% 的数据,S中只含有‘L’和‘R’两种字符;
对于所有数据,0≤n≤50,S中只含有‘L’、‘R’、‘U’和‘D’四种字符。
#include <bits/stdc++.h>
using namespace std;
int a[3][3]={{1,2,3},{4,5,6},{7,8,0}};
int main()
{
int i,j,x=2,y=2,n;
cin>>n;
string s;
cin>>s;
for(i=n-1;i>=0;i--)
{
if(s[i]=='L')
{
swap(a[x][y],a[x][y+1]);
y++;
}
else if(s[i]=='R')
{
swap(a[x][y],a[x][y-1]);
y--;
}
else if(s[i]=='U')
{
swap(a[x][y],a[x+1][y]);
x++;
}
else
{
swap(a[x][y],a[x-1][y]);
x--;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
return 0;
}