题意:
Bob设置了一个机器人,你可以给他下指令,机器人可以上下左右移动,但是Bob忘记了每个人指令所代表的含义,现在给出一串只有0,1,2,3的指令,让你求出在不同情况下,机器人可以从起点到达终点的方法的数量
基本思路:
就是给每个数字分配不同的含义,比如说1是up,2是down,3是left,4是right,然后总共有24种情况,也就是4的全排列个数
代码:
#include <bits/stdc++.h>
using namespace std;
int dir[4]={0,1,2,3};
char maze[55][55];
char op[123];
int sx,sy;
int ex,ey;
int n,m;
bool solve()
{
int len = strlen(op);
int x=sx,y=sy;
for(int i=0;i<len;i++)
{
int num = op[i]-'0';
switch(dir[num])
{
case 0:x++;break;
case 1:x--;break;
case 2:y++;break;
case 3:y--;break;
}
if(x>=n||x<0||y>=m||y<0) return 0;
else if(maze[x][y]=='E') return 1;
else if(maze[x][y]=='#') return 0;
}
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>maze[i][j];
if(maze[i][j]=='S')
{
sx=i;sy=j;
}
else if(maze[i][j]=='E')
{
ex=i;ey=j;
}
}
scanf("%s",op);
int ans=0;
do
{
ans+=solve();
}while(next_permutation(dir,dir+4));
printf("%d\n",ans);
return 0;
}