猫和老鼠 蓝桥杯/手速/暴力练习赛(暴力搜索)

猫和老鼠 蓝桥杯/手速/暴力练习赛
【题目描述】猫和老鼠在10*10 的方格中运动,例如:*...*...........*......*...*...............*.C....*.....*......*........M......*...*.*.....*.*......C=猫(CAT)M=老鼠(MOUSE)*=障碍物.=空地猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1 秒的时间做一个右转90 度。一开始他们都面向北方。编程计算多少秒以后他们相遇。【输入格式】10 行,格式如上【输出格式】相遇时间T。如果无解,输出-1。【样例输入】*...*...........*......*...*...............*.C....*.....*......*........M......*...*.*.....*.*......
  1 /*
  2     思路:如果猫和老鼠不相遇,那么一定是猫在某一个格子沿着某一个方向重复走了2次以上并且
  3     老鼠也是这样。 
  4 */ 
  5 #include<iostream> 
  6 #include<cstring> 
  7 #include<cstdio> 
  8 #include<algorithm>
  9 using namespace std;
 10 
 11 char mp[15][15];
 12 
 13 const int left_dir = 1;
 14 const int right_dir = 2;
 15 const int up = 3;
 16 const int down = 4;
 17 const int mouse = 1;
 18 const int cat = 0;
 19 
 20 struct node{
 21     int x, y;
 22     int dir;
 23     node(){
 24         dir = up;
 25     }
 26     
 27     bool flag[15][15][5];//记录当前格子在某一个方向上是否走过 
 28     
 29     void init(int x, int y){
 30         memset(flag, false, sizeof(flag));
 31         this->x = x;
 32         this->y = y;
 33         flag[x][y][up] = true;
 34     }
 35 };
 36 
 37 node nd[2];
 38 int cnt = 0;
 39 
 40 bool move(int i){
 41     int x=nd[i].x, y=nd[i].y;
 42     int newdir;
 43     switch(nd[i].dir){
 44         case up:
 45             x-=1;
 46             newdir = right_dir;
 47             break;
 48         case down:
 49             x+=1;
 50             newdir = left_dir;
 51             break;
 52         case left_dir:
 53             y-=1;
 54             newdir = up;
 55             break;
 56         case right_dir:
 57             y+=1;
 58             newdir = down;
 59             break;
 60     }
 61     if(mp[x][y] != '*'){
 62         nd[i].x = x;
 63         nd[i].y = y;
 64     } else {
 65         nd[i].dir = newdir;
 66     }
 67     
 68     if(!nd[i].flag[x][y][nd[i].dir]){
 69         nd[i].flag[x][y][nd[i].dir] = true;
 70         return true;        
 71     } else return false;
 72 }
 73 
 74 void test(){
 75     bool flag = true, flag1=false, flag2=false;
 76     while(flag){
 77         if(nd[cat].x == nd[mouse].x && nd[cat].y == nd[mouse].y) break;
 78         if(!move(cat))
 79             flag1 = true;
 80         if(!move(mouse))
 81             flag2 = true;
 82         ++cnt;
 83         if(flag1 && flag2) flag = false;
 84     }
 85     if(flag) printf("%d\n", cnt);
 86     else printf("-1\n");
 87 }
 88 
 89 int main() {
 90     memset(mp, '*', sizeof(mp));
 91     for(int i=1; i<=10; ++i){
 92         scanf("%s", mp[i]+1);
 93         mp[i][strlen(mp[i]+1)+1] = '*';
 94         for(int j=1; j<=10; ++j){
 95             if(mp[i][j]=='C'){
 96                 nd[cat].init(i, j);
 97                 mp[i][j] = '.';
 98             }
 99             else if(mp[i][j] == 'M'){
100                 nd[mouse].init(i, j);
101                 mp[i][j] = '.';
102             }
103         }
104         getchar();
105     }
106     test();
107     return 0;
108 }
109 /*
110 *...*.....
111 ......*...
112 ...*...*..
113 ..........
114 ...*.C....
115 *.....*...
116 ...*......
117 ..M......*
118 ...*.*....
119 .*.*......
120 */

 

转载于:https://www.cnblogs.com/hujunzheng/p/4415666.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 4*4矩阵按键

本文章讲述了如何用STM32编写4*4矩阵按键程序&#xff0c;先简单介绍一下扫描的基本方法&#xff1a;1.反转法 2.行列扫描。本文主要介绍行列扫描 欢迎加入嵌入式学习群&#xff1a;559601187 &#xff08;一&#xff09;代码如下 /*****************************************…

编译原理:正规式转变成DFA算法

//将正规式转变成NFApackage hjzgg.formal_ceremony_to_dfa;import java.util.ArrayList;class Edge{public int u, v;public char key;public Edge(int u, int v, char key) {super();this.u u;this.v v;this.key key;}Overridepublic String toString() {return u "…

C语言实现音乐播放器(Linux madplay)

&#xff08;一&#xff09;需求分析 1.扫描指定路径下的音乐&#xff0c;并显示出来 2.实现音乐的播放、暂停、上一首和下一首的功能 3.程序退出释放内存资源 &#xff08;二&#xff09;思路 1.扫描出指定路径下的音乐文件(便利指定文件夹&#xff0c;找出音频文件放在数组…

编译原理(简单自动词法分析器LEX)

编译原理&#xff08;简单自动词法分析器LEX&#xff09;源程序下载地址&#xff1a; http://files.cnblogs.com/files/hujunzheng/%E6%B1%87%E7%BC%96%E5%8E%9F%E7%90%86%E7%AE%80%E5%8D%95LEX%EF%BC%88%E8%AF%8D%E6%B3%95%E8%87%AA%E5%8A%A8%E5%88%86%E6%9E%90%E5%99%A8%EF%…

虚拟机中安装linux

&#xff08;一&#xff09;前言 就在昨天电脑的固态突然崩掉&#xff0c;无奈重新把系统装在的以前的硬盘上&#xff0c;为了能够继续工作重新配置嵌入式linux系统开发环境&#xff0c;本教程主要记录在虚拟机中安装linux。 &#xff08;二&#xff09;环境准备 虚拟机&…

编译原理简单语法分析器(first,follow,分析表)源码下载

编译原理&#xff08;简单语法分析器下载&#xff09; http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC%A6%E5%8F%B7%E5%90%8E%E7%9A%84%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8.zip 转载于:https://www.cnblogs.com/hujunzheng…

Ubuntu设置root登录

1.、Ubuntu 管理员用户 root 默认没有密码&#xff0c;在使用前最好添加密码&#xff0c;使用指令&#xff1a; sudo passwd root 注意&#xff1a;命令行输入密码时不显示&#xff0c;输入时需注意密码的准确性&#xff1b; 2、Ubuntu 想要用 root 帐户登录&#xff0c;可在普…

vim配置之spacevim

为了更好的利用vim&#xff0c;我们一般需要自己配置&#xff0c;今天介绍了一下经常用的spacevim &#xff08;一&#xff09;配置环境 Ubuntu16.04vim 7.4版本以上(必须&#xff01;&#xff01;) &#xff08;二&#xff09;安装spacevim 1.检查vim的版本&#xff1a; v…

Ubuntu更换gnome桌面环境后不能root登录

安装完Ubuntu后感觉界面有点丑陋&#xff0c;安装了gnome桌面环境试一下 sudo apt-get install gnome-shell sudo apt-get install ubuntu-gnome-desktop如果选择了lightdm后可以使用sudo dpkg-reconfigure gdm3 重新改回gdm3 sudo apt-get install unity-tweak-tool sudo ap…

Ubuntu下安装tilix终端仿真器

安装环境 Ubuntu 16.04 操作步骤 首先添加这个终端模拟器仓库的公钥。这里我都是以root超级用户权限操作的&#xff0c;如果没有的话&#xff0c;请在命令前面加sudo。 add-apt-repository ppa:webupd8team/terminixapt update安装Tilix。 apt install tilix安装完成测试结…

(扩展欧几里德算法)zzuoj 10402: C.机器人

10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼&#xff0c;既能原地蹦&#xff0c;又能跳远。由于受软硬件设计所限&#xff0c;机器人卡尔只能定点跳远。若机器人站在&#xff08;X&#xff0c;Y&#xff09;位置&#xff0c;它可以原地蹦&#xff0c;但只可…

vim配置之snippets代码块

&#xff08;一&#xff09;目的 我们在编写程序的过程中&#xff0c;经常会敲一些重复的代码&#xff0c;我们可以利用snippets来达到输入简写来敲出完整的代码 &#xff08;二&#xff09;安装步骤 安装使用Vundle,没有vbundle的先执行下面的命令 git clone https://gith…

Ubuntu 16.04 安装CodeBlocks

博主作为嵌入式开发者&#xff0c;经常使用c/c开发&#xff0c;所以今天来装一下经常使用的codeblocks&#xff0c;linux下代码编辑器有好多&#xff0c;可以上网搜一下linux下常用的代码编辑器就会出来好多&#xff0c;codeblocks作为c/c编辑器很方便&#xff0c;无论是安装还…

svn的安装与使用

Eclipse安装SVN插件 1、下载最新的Eclipse&#xff0c;我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版 如果没有安装的请到这里下载安装&#xff1a;http://eclipse.org/downloads/ 2、下载SVN插件subclipse&#xff0c;安装方法有两种.那种绿色的以link方式安…

c语言实现跳动的心

本文章分为两部分&#xff1a;第一部分为实现多彩的心&#xff0c;第二部分是实现心得跳动&#xff0c;两个代码均独立运行 本篇文章转载自公众号&#xff1a; C语言程序设计基础知识 &#xff08;一&#xff09;C语言实现多彩的心 实现过程其实很简单 首先使用for循环绘制心…

structs2之多文件上传

//首先是Action部分import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException; import java.util.List;import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext;i…

Linux下使用消息队实现 ATM 自动取款机功能

文章分五部分&#xff1a;需求分析、项目所需知识点、思路讲解、代码实现、功能演示 本文内容较长&#xff0c;建议是按照我自己的思路给大家讲解的&#xff0c;如果有其他问题&#xff0c;欢迎评论区讨论 文章中的代码是在linux下编译实现的&#xff0c;注意自己的环境。 &…

200行代码实现视频人物实时去除

今天在GitHub上发现了一个好玩的代码&#xff0c;短短几百行代码就实现了从复杂的背景视频中去除人物&#xff0c;不得不说这位大佬比较厉害。 这个项目只需要在网络浏览器中使用JavaScript&#xff0c;用200多行TensorFlow.js代码&#xff0c;就可以实时让视频画面中的人物对…

codeforces C. Vanya and Scales

C. Vanya and ScalesVanya has a scales for weighing loads and weights of masses w0, w1, w2, ..., w100 grams where w is some integer not less than 2(exactly one weight of each nominal value). Vanya wonders whether he can weight an item with mass m using …

菱形继承和虚继承、对象模型和虚基表

1.菱形继承&#xff08;钻石继承&#xff09;&#xff1a;两个子类继承同一父类&#xff0c;而又有子类同时继承这两个子类。例如B,C两个类同时继承A&#xff0c;但是又有一个D类同时继承B,C类。 2.菱形继承的对象模型 class A { public:int _a; };class B :public A { p…