http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2718&cid=1203

题意:给你一个m乘n的格子阵,从一边进去,直线往前走,如果前边有石头就往右走,如果右边还有石头就往左走,如果左边还有石头就忘回走,会给你一个起始点的坐标,当然是在4条边上,但是不会在角上,问你在哪个格子走出去,且走了多少步。

思路:DFS。好吧,当时做的时候卡在这儿,一直没D出来。。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int map[maxn][maxn]; int step=,n,m;
void dfs(int x,int y,int flag)
{
if(flag == )//右
{
bool flag1 = false;
for(int i = x ; i <= n ; i++)
{
if(map[i][y])//一直走直到前边是石头为止
{
flag1 = true ;
step += (i-x-);//把前边走过的都加上但要减去当前占的这个格子,所以减1
if(!map[i-][y-])//如果右边没有石头向右转
{
dfs(i-,y,);//右的右边是下
break;//结束掉每一次的循环,因为有石头之后循环就不应该进行了
}
else if(map[i-][y-]&&!map[i-][y+])//向上
{
dfs(i-,y,);
break;
}
else if(map[i-][y-]&&map[i-][y+])//回去
{
dfs(i-,y,);
break;
}
}
}
if(!flag1)
{
step += (n-x);
printf("%d %d %d\n",n,y,step);
return;
}
}
else if(flag == )//上
{
bool flag2=false;
for(int i = y ; i <= m ; i++)
{
if(map[x][i])
{
flag2 = true ;
step += (i-y-) ;
if(!map[x+][i-])
{
dfs(x,i-,);
break;
}
else if(map[x+][i-]&&!map[x-][i-])
{
dfs(x,i-,);
break;
}
else if(map[x+][i-]&&map[x-][i-])
{
dfs(x,i-,);
break;
}
}
}
if(!flag2)
{
step += (m-y);
printf("%d %d %d\n",x,m,step);
}
}
else if(flag == )//左
{
bool flag3 = false;
for(int i = x ; i >= ; i--)
{
if(map[i][y])
{
flag3 = true ;
step += (x-i-);
if(!map[i+][y+])
{
dfs(i+,y,);
break;
}
else if(map[i+][y+]&&!map[i+][y-])
{
dfs(i+,y,);
break;
}
else if(map[i+][y+]&&map[i+][y-])
{
dfs(i+,y,);
break;
}
}
}
if(!flag3)
{
step += x-;
printf("%d %d %d\n",,y,step);
}
}
else if(flag == )//下
{
bool flag4 = false;
for(int i = y ; i >= ; i--)
{
if(map[x][i])
{
flag4 = true;
step += (y-i-);
if(!map[x-][i+])
{
dfs(x,i+,);
break;
}
else if(map[x-][i+]&&!map[x+][i+])
{
dfs(x,i+,);
break;
}
else if(map[x-][i+]&&map[x+][i+])
{
dfs(x,i+,);
break;
}
}
}
if(!flag4)
{
step += y-;
printf("%d %d %d\n",x,,step);
}
}
} int main()
{
int k,sx,sy;
int cnt = ;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
if(n==&&m==&&k==) break;
step = ;//初始格子算一步
memset(map,,sizeof(map));
for(int i = ; i < k ; i++)
{
int x,y;
scanf("%d%d",&x,&y);
map[x][y] = ;//将这些点标记为1代表不能走
}
int flag;
scanf("%d %d",&sx,&sy);
if(sx == ) flag = ;//右
else if(sy == ) flag = ;//上
else if(sy == m) flag = ;//下
else if(sx == n) flag = ;//左
printf("Case %d: ",cnt);
cnt++;
dfs(sx,sy,flag);
}
return ;
}

中国海洋大学第四届朗讯杯高级组 A Rocky的更多相关文章

  1. 中国海洋大学第四届朗讯杯高级组 I Cuckoo for Hashing

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2719&cid=1203 题意 :意思就是哈希来的,具体大意就是说有两个哈希表,然后有这样 ...

  2. 中国海洋大学第四届朗讯杯高级组 Cash Cow(模拟)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2721 题意: 给定n个左标,跟那n个坐标 ...

  3. 中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2718 题意:优先直走,右 左 后.... ...

  4. 腾讯云 安全组配置及与MySQL 远程登录失败原因浅析

    前言,知道自己腾讯云服务器安全组配置并在安全组里开放了所有端口的用户可以粗略的看看下边的内容,否则就仔细看看吧. 因为有学习及业务需要,我要在腾讯云上安装了CentOS7.2版本的服务器上安装MySQ ...

  5. 第四届蓝桥杯C++B组省赛

    1.高斯日记 2.马虎的算式 3.第39级台阶 4.黄金连分数 5.前缀判断 6.三部排序 7.错误票据 8.翻硬币 9.带分数 10.连号区间数

  6. 第四届蓝桥杯C++B组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的 ...

  7. CF 3-6 2级组 D题 STRESSFUL TRAINING 紧张的比赛

    题目大概是这样的: 给出一个数列a[n] ,对于每一个数 a [i] 来说 都会在 T - - 时 -= b[i] 每个数都在任何时刻不能小于0 你可以在每次T - - 之前时给 一 个 a[i] + ...

  8. [2020年10月28日普级组]1405.小B浇花

    区 间 和 的 和 区间和的和 区间和的和 题目解析 就直接模拟,从最低的花的高度向最高的花的高度枚举,如果当循环变量的值到达了顶峰,但还有花的数量大于2的,就把循环上线加一(所以数组要开大些) Co ...

  9. [2020年10月28日普级组]1406.SMRTFUN

    S M R T F U N SMRTFUN SMRTFUN 题目描述 "又肥又温顺,又大又笨,他们看起来那么傻,而且也不有趣--" 这些牛想要证明,他们是既有趣,又聪明的.为了这样 ...

随机推荐

  1. C语言碰到的一元二次方程

    最近开始在学习C语言,看视频,是http://www.rjzxw.com/jc-74-1.html 碰到老师讲的一元二次方程例子,不懂,所以找了下资料,看了网上一元二次方程的视频(是自己太浮躁了,听不 ...

  2. vc静态加载dll和动态加载dll

    如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib, &quo ...

  3. partial与sorted

    import functools sorted_ignore_case = functools.partial(sorted,cmp=lambda s1, s2: cmp(s1.upper(), s2 ...

  4. linux系统文件属性

    1  硬链接概念 硬链接是指通过索引节点(Inode)来进行链接,在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(I ...

  5. [ADO.NET]写入数据

    关键字:.NET,SQL SERVER,SQLBULKCOPY 插入一条数据的操作(SqlCmd). public void InsertOneIntoSourceDB() { if (DBConne ...

  6. [leetcode] 403. Frog Jump

    https://leetcode.com/contest/5/problems/frog-jump/ 这个题目,还是有套路的,之前做过一道题,好像是贪心性质,就是每次可以跳多远,最后问能不能跳到最右边 ...

  7. [翻译][MVC 5 + EF 6] 5:Code First数据库迁移与程序部署

    原文:Code First Migrations and Deployment with the Entity Framework in an ASP.NET MVC Application 1.启用 ...

  8. ubuntu12.04 U盘自动挂载配置

    Ubuntu12.04禁止U盘等设备的自动挂载方法如下: 在图形界面(字符界面无效)内进入系统终端,ctrl+alt+T或者gnome-terminal 禁止自动挂载:$ gsettings seto ...

  9. js搜索框 js仿百度搜索 js下拉框 jQuery.Autocomplete使用

    做了一个网站,需要根据文本框的输入模糊搜索数据库内容给出提示供用户选择,就找到了jQuery.Autocomplete 效果如下图: 该插件托管在github上,具体地址:https://github ...

  10. htmlt中的块状元素与内联元素

    块元素(block element) address - 地址 blockquote - 块引用 center - 举中对齐块 dir - 目录列表 div - 常用块级容易,也是CSS layout ...