Tom and Jerry
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 257 测试通过 : 103
比赛描述
Tom和Jerry在10*10的方格中:
…..
……*…
..
……….
…*.C….
…..
…*……
..M……*
.….
..……

C=Tom(猫)
M=Jerry(老鼠)
*=障碍物
.=空地

他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。
他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。

输入
10行,格式如上

输出

相遇时间T。如果无解,输出-1。

样例输入
…..
……*…
..
……….
…*.C….
…..
…*……
..M……*
.….
..……

样例输出
49

题目来源
wwm

题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1058

解题思路:
简单的深搜,因为Tom和Jerry的旋转方向是规定的,因此不用考虑最短时间的问题,dfs传递了7个参数,前四个分别代表Tom和Jerry的当前位置坐标,接着分别是Tom和Jerry的当前方向,最后一个是时间。当能走下一步时方向不改变,不能走时方向改变,只有时间是每进入一层+1的。关键是访问过的情况标记,我用了四位数组,只有当Tom和Jerry的位置和方向全部相同是才标记。

代码如下:

#include <cstdio>
#include <cstring>
char s[12][12];
int vis[100][100][4][4];
int scx,scy,smx,smy;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int ans;
bool p,q;
void dfs(int cx,int cy,int mx,int my,int dc,int dm,int cnt)
{if(cx==mx && cy==my){ans=cnt;p=true;return ;}int ncx=cx+dx[dc];int ncy=cy+dy[dc];if(ncx<0 || ncx>=10 || ncy<0 || ncy>=10 || s[ncx][ncy]=='*'){if(dc+1>=4)dc=0;else dc+=1;ncx=cx;ncy=cy;}int nmx=mx+dx[dm];int nmy=my+dy[dm];if(nmx<0 || nmx>=10 || nmy<0 || nmy>=10 ||s[nmx][nmy]=='*'){if(dm+1>=4)dm=0;else dm+=1;nmx=mx;nmy=my;}if(vis[ncx*10+ncy][nmx*10+nmy][dc][dm]){return;}vis[ncx*10+ncy][nmx*10+nmy][dc][dm]=1;dfs(ncx,ncy,nmx,nmy,dc,dm,cnt+1);if(p)return ;vis[ncx*10+ncy][nmx*10+nmy][dc][dm]=0;
}
int main(void)
{ans=0;p=false,q=false;memset(vis,0,sizeof(vis));for(int i=0;i<10;i++){scanf("%s",s[i]);for(int j=0;j<10;j++){if(s[i][j]=='C'){scx=i;scy=j;}else if(s[i][j]=='M'){smx=i;smy=j;}}}if(smx==scx && scy==smy){printf("0\n");return 0;}dfs(scx,scy,smx,smy,0,0,0);if(p)printf("%d\n",ans);elseprintf("-1\n");
}

noj 1058 Tom and Jerry相关推荐

  1. 南邮 OJ 1058 Tom and Jerry

    Tom and Jerry 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 251            测试 ...

  2. Tom and Jerry

    Description Tom和Jerry在10*10的方格中: --.. --*- --.. ---. -*.C-. -..- -*-- ..M--* -.-. ..-- C=Tom(猫) M=Je ...

  3. 观察者模式之Tom and Jerry

    namespace TomAndJerry {     class Program     {         static void Main(string[] args)         {    ...

  4. Tom和Jerry来了,Tom和Jerry走了——北漂18年(38)

    上次讲到跟我同一时候入职的女销售走了. 回忆起来,她的问题多半是技巧足够,脑子不足够,走了之后再没联系.不久之后,在老板的要求之下.LilyG又招聘了两位男销售,英文名字非常登对一个叫Tom,一个叫J ...

  5. 假设Tom和Jerry利用Java UDP进行聊天

    1-1 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序.具体如下: (1).Tom和Jerry聊天的双方都应该具有发送端和接收端: (2).利用DatagramSocket与Da ...

  6. 计网实验一 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。具体如下:

    一[实验目的] 掌握基于多线程的复杂网络程序的开发方法和开发流程: 按照要求设计实现软件,以培养应用复杂计算系统开发的能力,并在设计和开发过程中体现出创新意识. 二[实验要求] 以下每个实验均要求: ...

  7. 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。

    假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序.具体如下: (1).Tom和Jerry聊天的双方都应该具有发送端和接收端: (2).利用DatagramSocket与Datagr ...

  8. java猫和老鼠_【进化史】猫和老鼠游戏进化史 Tom and Jerry Games 1989 - 2020

    https://youtu.be/7grgYL-Rp7M History Of Tom and Jerry Games 1989 to 2020 作者:M Pro Channel 1. Tom and ...

  9. UVAlive 7308 Tom and Jerry 【几何数学】

    题目链接:这里是传送阵.. Tom and Jerry are very fond of cat and mice games, which might be rather obvious to yo ...

最新文章

  1. idea 运行jmeter源码_学会BeanShell,才敢说自己懂Jmeter
  2. Web ReplayType?
  3. 博弈论的局限性(博弈论的诡计)
  4. freebsd mysql57_Freebsd7.2下Ports安装PHP5、MySql5.4、Apache22
  5. Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis
  6. Linux学习:目录操作函数
  7. 联想拯救者y空间兑换代码_十代酷睿全面升级 拯救者Y7000P 2020产品解读
  8. 使用django的权限管理系统permission
  9. JWT(JSON web token)
  10. 与Maven 3,Failsafe和Cargo插件的集成测试
  11. mysql pow函数怎么用_pow函数怎么用
  12. 周记之琢磨下计算机网络(2018/10/22-2018/10/28)
  13. Visual Studio 插件的开发
  14. 去掉java文件中的注释_利用JavaParser去除java文件中的注释
  15. [NOIP2011] 计算系数(二项式定理)
  16. MFC控件 --- 旋转控件
  17. c#中将word转成图片,无水印
  18. 直播带货系统的六大热门功能模块概述
  19. 融金所-孙明达:中国普惠金融覆盖率已属较高水平
  20. 期货数据保存到excel里面

热门文章

  1. 物联网安全-单向散列算法
  2. Adplus 抓取Crash Dump
  3. 关于极限的有界性的理解
  4. [Activiti] UEL 统一表达式语言 (任务节点 Assignee 通过变量获取)
  5. 【easyexcel】导入到数据库功能 正版实测
  6. 操作系统学习同步与互斥例题:理发师问题
  7. 日本成本企划的现状及未来
  8. 前端开发面试题之综合篇
  9. linux 移动目录至u 盘,Linux下通过OTG把板卡上的一个磁盘或文件映射成移动磁盘...
  10. 【MySQL逻辑运算符、模糊查询和ifnull】