noj 1058 Tom and Jerry
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相关推荐
- 南邮 OJ 1058 Tom and Jerry
Tom and Jerry 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 251 测试 ...
- Tom and Jerry
Description Tom和Jerry在10*10的方格中: --.. --*- --.. ---. -*.C-. -..- -*-- ..M--* -.-. ..-- C=Tom(猫) M=Je ...
- 观察者模式之Tom and Jerry
namespace TomAndJerry { class Program { static void Main(string[] args) { ...
- Tom和Jerry来了,Tom和Jerry走了——北漂18年(38)
上次讲到跟我同一时候入职的女销售走了. 回忆起来,她的问题多半是技巧足够,脑子不足够,走了之后再没联系.不久之后,在老板的要求之下.LilyG又招聘了两位男销售,英文名字非常登对一个叫Tom,一个叫J ...
- 假设Tom和Jerry利用Java UDP进行聊天
1-1 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序.具体如下: (1).Tom和Jerry聊天的双方都应该具有发送端和接收端: (2).利用DatagramSocket与Da ...
- 计网实验一 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。具体如下:
一[实验目的] 掌握基于多线程的复杂网络程序的开发方法和开发流程: 按照要求设计实现软件,以培养应用复杂计算系统开发的能力,并在设计和开发过程中体现出创新意识. 二[实验要求] 以下每个实验均要求: ...
- 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。
假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序.具体如下: (1).Tom和Jerry聊天的双方都应该具有发送端和接收端: (2).利用DatagramSocket与Datagr ...
- 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 ...
- UVAlive 7308 Tom and Jerry 【几何数学】
题目链接:这里是传送阵.. Tom and Jerry are very fond of cat and mice games, which might be rather obvious to yo ...
最新文章
- idea 运行jmeter源码_学会BeanShell,才敢说自己懂Jmeter
- Web ReplayType?
- 博弈论的局限性(博弈论的诡计)
- freebsd mysql57_Freebsd7.2下Ports安装PHP5、MySql5.4、Apache22
- Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis
- Linux学习:目录操作函数
- 联想拯救者y空间兑换代码_十代酷睿全面升级 拯救者Y7000P 2020产品解读
- 使用django的权限管理系统permission
- JWT(JSON web token)
- 与Maven 3,Failsafe和Cargo插件的集成测试
- mysql pow函数怎么用_pow函数怎么用
- 周记之琢磨下计算机网络(2018/10/22-2018/10/28)
- Visual Studio 插件的开发
- 去掉java文件中的注释_利用JavaParser去除java文件中的注释
- [NOIP2011] 计算系数(二项式定理)
- MFC控件 --- 旋转控件
- c#中将word转成图片,无水印
- 直播带货系统的六大热门功能模块概述
- 融金所-孙明达:中国普惠金融覆盖率已属较高水平
- 期货数据保存到excel里面