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. 跨域方法之CORS

    跨域的方法非常之多,如果想了解其中CORS,不要浪费时间,看下面三个就够了 了解CORS   https://developer.mozilla.org/en-US/docs/Web/HTTP/Acc ...

  2. BFC引发的关于position的思考

    BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin决定.属于同一个BFC的两个相邻Box的margin会发生重叠 每个元素的margin box的左边, ...

  3. ajax 跨域的几种方式

    网络上跨域的文章大多一样,这里我写下,巩固下自己的知识,顺便做个记录 什么是跨域 这里简单拿百度的网址做个例子:http://www.baidu.com:80 (默认都是80端口.可省略) http ...

  4. 【JDK源码系列】ConcurrentHashMap

    并发永远是高性能的话题,而并发容器又是java中重要的并发工具,所以今天我们来分析一下Concurrent包中ConcurrentHashMap(以下简称Chashmap).普通容器在某些并发情况下的 ...

  5. ajax调用服务的基本格式

    <个人积累,转载请注明出处> 格式如下: $.ajax({ type: "post", //访问WebService使用Post方式请求 url: "http ...

  6. hhgis驱动

    function loadPathInfo 在car.js中 function loadPathInfo(carid, fnClass) { var qureydrive; if (jsonp) qu ...

  7. SpringMVC学习记录

    1E)Spring MVC框架 ①Jar包结构: docs+libs+schema. 版本区别:核心包,源码包. SpringMVC文档学习: 学习三步骤: 1)是什么? 开源框架 2)做什么? IO ...

  8. [转] sql数据类型 varchar与nvarchar的区别

    SQL Server提供两种数据类型来存储字符信息.在如何在SQL Server或应用程序中使用方面,这两种数据类型大致是一样的.差别在于nvarchar是用于存储处理数据库图表中多语言数据的Unic ...

  9. Mysql 创建联合索引注意事项

      当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 索引Index_1(Crea ...

  10. ###学习《C++ Primer》- 2

    点击查看Evernote原文. #@author: gr #@date: 2014-10-01 #@email: forgerui@gmail.com Part 2: STL顺序容器(第9章) 一.标 ...