本人第一道蓝题,希望各位喜欢;
最后有完整代码!;
首先,我们分析它是一个矩阵,所以定义一个二维数组:
char q[10][10];
输入:
for(int i = 0;i < 8;i++){
for(int j = 0;j < 8;j++){
cin >> q[i][j];
}
}
没什么好讲的;
然后要遍历整个矩阵,这里我用dfs来遍历;附上代码:
void dfs(int x,int y){//深搜不必
int lx = x + nx[f];//x
int ly = y + ny[f];//y
if(lx < 0 || lx > 7 || ly < 0 || ly > 7){//边界条件;
return;
}
if(q[lx][ly] != '.'){//如果当前方向前面有棋子
dfs(lx,ly);//递归
}
q[lx][ly] = q[x][y];//棋子前移
q[x][y] = '.';//变空,因为已走;
nwx = lx;//向前走的位置;
nwy = ly;//变为lx,ly
}
//其实也就是判断一下是否为空!!!;
接着就是主函数中的输入字符串然后执行;
如果是move那么向前移动,判断是否到头;
如果是turn 那么判断是left还是righ还是back是左转还是右转还是向后转;这里注意判断是否超出;
cin>>s;//先输入一个!!!关键;
int a;//move命令;
while(s != "#"){//结束
if(s == "move"){//如果是向前走的话;
cin >> a;//走多少步
for(int i = 0;i < a;i++){
dfs(nwx,nwy);//参考第7行d函数
}
}
if(s == "turn"){//转向
cin >> s;
if(s == "left"){
f--;//往左
}
if(s == "right"){
f++;//往右
}
if(s == "back"){
f += 2;//往后
}
if(f >= 4){//如果超出
f -= 4;//转回去
}
if(f < 0){//为负数;
f += 4;//重回;
}
}
cin >> s;//再次输入命令
}
最后设上方向标然后输出就好啦!;
q[nwx][nwy] = vis[f];//将你设成当前方向的状态
for(int i = 0;i < 8;i++){
for(int j = 0;j < 8;j++){
cout << q[i][j];
}
cout << endl;
}
最后附上完整代码:
#include<bits/stdc++.h>
using namespace std;
string s;
char q[10][10];//初步设定好棋盘;
char vis[5]={'<','^','>','v'};//方向表
int nx[4]={0,-1,0,1};//坐标;
int ny[4]={-1,0,1,0};
int nwx,nwy;//你的位置;
int f;//方向的变量
void dfs(int x,int y){//深搜不必
int lx = x + nx[f];//x
int ly = y + ny[f];//y
if(lx < 0 || lx > 7 || ly < 0 || ly > 7){//边界条件;
return;
}
if(q[lx][ly] != '.'){//如果当前方向前面有棋子
dfs(lx,ly);//递归
}
q[lx][ly] = q[x][y];//棋子前移
q[x][y] = '.';//变空,因为已走;
nwx = lx;//向前走的位置;
nwy = ly;//变为lx,ly
}
int main()
{
for(int i = 0;i < 8;i++){
for(int j = 0;j < 8;j++){
cin >> q[i][j];
if(q[i][j] == '<'){//如果方向为左
f = 0;nwx = i;nwy = j;//设置位置
}
if(q[i][j] == '^'){
f = 1;nwx = i;nwy = j;
}
if(q[i][j] == '>'){
f = 2;nwx = i;nwy = j;
}
if(q[i][j] == 'v'){
f = 3;nwx = i;nwy = j;
}
}
}
cin >> s;
int a;//move命令;
while(s != "#"){//结束
if(s == "move"){//如果是向前走的话;
cin >> a;//走多少步
for(int i = 0;i < a;i++){
dfs(nwx,nwy);//参考第7行d函数
}
}
if(s == "turn"){//转向
cin >> s;
if(s == "left"){
f--;//往左
}
if(s == "right"){
f++;//往右
}
if(s == "back"){
f += 2;//往后
}
if(f >= 4){//如果超出
f -= 4;//转回去
}
if(f < 0){//为负数;
f += 4;//重回;
}
}
cin >> s;//再次输入命令
}
q[nwx][nwy] = vis[f];//将你设成当前方向的状态
for(int i = 0;i < 8;i++){
for(int j = 0;j < 8;j++){
cout << q[i][j];
}
cout << endl;
}
return 0;
}
感谢大家观看!!!