题目链接:3066. 巧虎机器人——颜色识别编程模式1(有人连比赛完题目在哪都不知道?)
题目大意:
地图上有个机器人,让你判断能不能从给定的起始地点(si,sj)走到目标地点(di,dj);机器人在地图上往哪边走与其所在方块的颜色有关,地图上有4种颜色r,b,g和y,你不知道每种颜色代表向上.向下,向左还是向右.你需要通过枚举找到一种方案使得机器人从起始地点走到目标地点.
如果都不能输出no,否则输出yes;(有人连题目都没读懂)
思路:
4种颜色r b g y和 4个方向一共有4!种方案,
因为第一种颜色可以从4个方向中选1个;
第二种颜色只能从3个方向中选1个…
…
…
我们可以把4个字符先映射到0123再映射到4种方向;
然后按照题目要求模拟就可以了,模拟的时候需要开个数组判断某点是否走过,走过则说明有循环,那么这种方案肯定不行;
对于4!全排列的枚举,可以用4个for循环,也可以用递归;(我不会for所以写了递归)
Code:
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=22;
char g[N][N];//地图
int s[256];//rbgy4种颜色字符映射到0~3
int a[5];//用来装0~3的全排列
int si,sj,di,dj;
bool st[5];//枚举全排列需要的判重数组
bool stg[N][N];//模拟的时候判断是否走过某点
int dx[]=<