【问题描述】

以下图(a)所示的巧虎机器人还可以识别地图上方格的颜色(红色、绿色、蓝色、黄色这四种颜色之一,图(b)为地图示例),因此它还有一种复杂的编程模式——颜色识别编程模式:可以指定每种颜色对应的指令,假设有四种指令,即向北、向东、向南、向西走一个方格,每种颜色对应且只对应一种指令,然后在地图上指定一个起始位置和目标位置,问是否存在一种指令方案(即指定红色、绿色、蓝色、黄色分别代表四种指令之一),使得能从起始位置出发到达目标位置。到达目标位置后,巧虎机器人就停下来,不再执行目标位置方格颜色对应的指令。

A-a.png

(a) 巧虎机器人

B-b.png

(b) 地图示例

【输入形式】

输入文件包含多个测试数据,每个测试数据包含3部分,第1部分占一行,为两个整数,M N(用空格隔开),2<M, N<=20,表示地图的行和列(行号和列号均从1开始计起);第2部分也占一行,为四个整数,si sj di dj(用空格隔开),分别表示起始位置的行号和列号、目标位置的行号和列号;第3部分占M行,每行有N个字符,这些字符可能为:r, g, b, y,分别表示方格的颜色为红色、绿色、蓝色、黄色。以上图(b)就是第2个样例数据对应的地图。

输入文件最后一行为“0 0”,代表输入结束。

测试数据保证起始位置和目标位置有效且不是同一个位置。

注意,如果巧虎机器人到了边界上的某方格再执行该方格颜色对应的指令后出边界了,这视为失败,即当前指令方案不能使得从起始位置出发到达目标位置。

【输出形式】

对于每个测试数据,输出占一行,如果有这样一条路径可以从起点走到终点,则输出yes否则输出no

【样例输入】

5 5

1 3 4 5

rbybb

brrry

gbgyg

rgbyg

rbygb

5 5

1 2 4 3

rbybb

brrry

gbgyg

rgbyg

rbygb

0 0

【样例输出】

no

yes
思路:枚举24种可能的颜色搭配(4!=24)。类似于逃出迷宫,前进一步之后后路即被封死。所以我们这里采用沉岛法。
(直接把枚举结果贴出来方便理解)
Code:

#include<iostream>
#include<algorithm>
using namespace std;
//方向修改标志
int directionx[4] = { -1,0,1,0 };
int directiony[4] = { 0,1,0,-1 };
int m, n;//行和列
char Edge[25][25];//读取的矩阵
int flag;//逃脱成功的标志
//枚举所有颜色搭配的可能,共有4!=24种
int MEIJU[24][4] = {{0,1,2,3},{0,1.3,2},{0,2,1,3},{0,2,3,1},{0,3,2,1},{0,3,1,2},{1,0,2,3},{1,0,3,2},{1,2,0,3},{1,2,3,0},{1,3,0,2},{1,3,2,0},{2,0,1,3},{2,0,3,1},{2,1,0,3},{2,1,3,0},{2,3,1,0},{2,3,0,1},{3,0,1,2},{3,0,2,1},{3,2,0,1},{3,2,1,0},{3,1,0,2},{3,1,2,0}
};
//四种方向
int dong,nang,xi,bei;
//迷宫——沉岛法,寻找唯一逃生路径
void dfs(int si, int sj, int di, int dj) {if (si == di && sj == dj) {flag = true;return;}if (Edge[si][sj] == 'r') {int ni = si + directionx[bei];int nj = sj + directiony[bei];if (Edge[ni][nj]!='*'&&(ni > 0 && ni <= m) && (nj > 0 && nj <= n)) {//封住后路Edge[si][sj] = '*';//前进到下一步dfs(ni, nj, di, dj);//还原Edge[si][sj] = 'r';}}else if (Edge[si][sj] == 'b'){int ni = si + directionx[dong];int nj = sj + directiony[dong];if (Edge[ni][nj] != '*' && (ni > 0 && ni <= m) && (nj > 0 && nj <= n)) {//封住后路Edge[si][sj] = '*';//前进到下一步dfs(ni, nj, di, dj);//还原Edge[si][sj] = 'b';}}else if (Edge[si][sj] == 'y') {int ni = si + directionx[xi];int nj = sj + directiony[xi];if (Edge[ni][nj] != '*' && (ni > 0 && ni <= m) && (nj > 0 && nj <= n)) {//封住后路Edge[si][sj] = '*';//前进到下一步dfs(ni, nj, di, dj);//还原Edge[si][sj] = 'y';}}else {int ni = si + directionx[nang];int nj = sj + directiony[nang];if (Edge[ni][nj] != '*' && (ni > 0 && ni <= m) && (nj > 0 && nj <= n)) {//封住后路Edge[si][sj] = '*';//前进到下一步dfs(ni, nj, di, dj);//还原Edge[si][sj] = 'g';}}
}
int main() {while (true){flag = false;memset(Edge, 0, sizeof(Edge));cin >> m >> n;if (m == 0 && n == 0)break;int si, sj, di, dj;cin >> si >> sj >> di >> dj;for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++) {cin >> Edge[i][j];}}for (int i = 0; i < 24; i++) {dong = MEIJU[i][0];nang = MEIJU[i][1];xi = MEIJU[i][2];bei = MEIJU[i][3];dfs(si, sj, di, dj);}if (flag)cout << "yes" << endl;else cout << "no" << endl;}
}

巧虎机器人——颜色识别编程模式一相关推荐

  1. 【课程设计】六足机器人颜色识别模块python程序

    #coding=utf8 # # 实现功能, 检测摄像头前是哪种颜色的物体,然后根据颜色作出对于动作 # import cv2 import numpy as np import pickle imp ...

  2. spider pi 智能视觉六足机器人 颜色识别功能 0603

    启动颜色识别功能 默认识别为红色 遇到红色就点头 其它颜色就摇头 更换识别颜色 默认识别的颜色是红色 编辑文件 颜色识别源码 修改源码 保存修改 lab颜色 操作文件 内容 调颜色 资源 第2课 颜色 ...

  3. 3065. 巧虎机器人——行走编程模式

    [问题描述] 以下图(a)所示的巧虎机器人有几种工作模式,其中行走编程模式具有简单的编程功能,能接收前进(F).后退(B).左转(L).右转(R)四种指令,输入一系列指令,然后按下OK键,巧虎机器人就 ...

  4. 米兔机器人 编程案例_模块化编程 米兔积木机器人颜色传感器

    米兔积木机器人是一款可以用积木拼接搭建外形,用移动终端远程遥控和编程控制的开放式智能电子玩具.自去年年底上市以来,凭借多变的造型以及极强的扩展性深得孩子和家长的喜爱.4月28日首款米兔积木机器人扩展包 ...

  5. 魔方机器人02 使用opencv-python进行颜色识别及K-Means聚类算法

    文章目录 安装opencv库 魔方状态识别 识别方案思路 识别方案简介 实践经验 在图像中标定位置 聚类算法 安装opencv库 如果你是Windows系统,在anaconda搭建的环境里运行以下命令 ...

  6. 《乐高EV3机器人搭建与编程》——2.2 颜色设计

    本节书摘来异步社区<乐高EV3机器人搭建与编程>一书中的第2章,第2.2节,作者:[美]Marziah Karch(卡奇),更多章节内容可以访问云栖社区"异步社区"公众 ...

  7. (机器视觉)Halcon下颜色识别与联合C#编程

    一.简介 在上一篇文章中写到了关于用Halcon做颜色识别的一个实验项目,在上一篇中是在Halcon环境中进行开发的,而在实际运用中,现场是不在Halcon中进行运行程序的,而且一些逻辑在Halcon ...

  8. 《乐高EV3机器人搭建与编程》一2.2 颜色设计

    本节书摘来异步社区<乐高EV3机器人搭建与编程>一书中的第2章,第2.2节,作者: [美]Marziah Karch(卡奇)译者: 真帅 , 田远帆 , 蒋知睿 , 刘昊熠 , 何晓旭 责 ...

  9. 物联网毕设 - 基于Kociemba算法和颜色识别的解魔方机器人 - 单片机

    ⭐️基于Kociemba算法和颜色识别的解魔方机器人⭐️ STM32开发板 亚克力机械手 全志 ARMPC C30 开发板 Kociemba算法 安卓APP 源码: https://blog.csdn ...

最新文章

  1. MySQL报错解决方案:2013-Lost connection to MySQL server
  2. 沃顿商学院最受欢迎的思维课
  3. MS SQL入门基础:更改数据库
  4. MDP马尔可夫决策过程(二)
  5. shell信息查看脚本linux,每次登录Shell时使用shell脚本查看Linux上的系统信息
  6. cass光标大小怎么调_cass7period;0鼠标不显示怎么解决quest;
  7. C# 字符串string的基本操作
  8. 容器技术Docker K8s 19 容器服务ACK基础与进阶-容器网络管理
  9. Chip Probe(CP)测试
  10. uni-app平台判断 | uni app判断h5 小程序 app 等不同平台
  11. JSzip 前端处理下载打包文件夹
  12. vue-draggle实现元素拖动,放大,缩小,多元素一起改变位置
  13. 监控服务器系统密码忘了怎么办,监控服务器系统配置密码
  14. 苹果无线网服务器改什么速度快,iPhone网速慢怎么办?苹果手机如何配置DNS?
  15. Veeam Backup 9.5 恢复VMware虚拟机
  16. 电脑怎么彻底卸载程序
  17. python 零代码快速开发平台_企业如何选择开源的零代码开发平台
  18. Android通信安全之HTTPS
  19. Twitter开发者账号及开发者APPs的创建 2019.05
  20. 2020年总结 - 不纠结当下,不忧虑未来

热门文章

  1. 第25回 给飞飞打个骚扰电话
  2. 微信小程序下拉框组件使用
  3. 电信光猫F450A 改配置
  4. kotlin 读取json文件_Kotlin入门(31)JSON字符串的解析
  5. matlab调用摄像头运用差帧法实现双物体跟踪
  6. nuwa创建新进程源码分析
  7. 解封攻略 拯救你的ChatGPT账号
  8. 基于深度学习的单目图像深度估计总结
  9. 亚马逊品牌备案流程步骤—Amazon商标备案的优势
  10. 中国光学十大进展|每秒4万亿帧相机,把光拍成黑客帝国子弹