emmmm....

在被新生暴打后,我花了很久才补出这道DFS。由于WA1检查了半天,最后竟然是输出少了一个:   ,心态小崩。

这里普通的dfs算出的连通区域并不能直接当做最后的答案。所以需要类似模拟的DFS来处理。

代码如下:

#include<iostream>
using namespace std;
int q[12][12];//用数组标记该位置是空地、食物、还是障碍。
int pd[12][12];//判断有没有走过
int maxx=0;//记录最大路径长度
int a,b,mb;//a,b记录起始坐标,mb记录目标长度
void dfs(int x,int y,int s)
{
if(s>maxx) maxx=s;
if(q[(x+a-1)%a][y]&&!pd[(x+a-1)%a][y])
{
pd[(x+a-1)%a][y]=1;
if(q[(x+a-1)%a][y]==1) dfs((x+a-1)%a,y,s+1);
else if(q[(x+a-1)%a][y]==2)dfs((x+a-1)%a,y,s);
pd[(x+a-1)%a][y]=0;
}
if(q[(x+a+1)%a][y]&&!pd[(x+a+1)%a][y])
{
pd[(x+a+1)%a][y]=1;
if(q[(x+a+1)%a][y]==1) dfs((x+a+1)%a,y,s+1);
else if(q[(x+a+1)%a][y]==2) dfs((x+a+1)%a,y,s);
pd[(x+a+1)%a][y]=0;
}
if(q[x][(y+b-1)%b]&&!pd[x][(y+b-1)%b])
{
pd[x][(y+b-1)%b]=1;
if(q[x][(y+b-1)%b]==1) dfs(x,(y+b-1)%b,s+1);
else if(q[x][(y+b-1)%b]==2) dfs(x,(y+b-1)%b,s);
pd[x][(y+b-1)%b]=0;
}
if(q[x][(y+b+1)%b]&&!pd[x][(y+b+1)%b])
{
pd[x][(y+b+1)%b]=1;
if(q[x][(y+b+1)%b]==1) dfs(x,(y+b+1)%b,s+1);
else if(q[x][(y+b+1)%b]==2) dfs(x,(y+b+1)%b,s);
pd[x][(y+b+1)%b]=0;
}
}
int main()
{
int i,r,l,s,t,xx,yy,j;
char k;
cin>>t;
l=1;
while(t--)
{
maxx=0;
cin>>a>>b>>mb;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
cin>>k;
if(k=='#') q[i][j]=0;
else if(k=='o') q[i][j]=2;
else if(k=='.') q[i][j]=1;
else if(k=='x')
{
xx=i;yy=j;q[xx][yy]=0;
}
pd[i][j]=0;
}
}
dfs(xx,yy,0);
if(maxx>=mb-1) cout<<"Case #"<<l++<<": Fits perfectly!"<<endl;
else cout<<"Case #"<<l++<<": Oh no, snake's too fat!"<<endl;
//cout<<maxx<<endl;
}
}

  其中、比较值得注意的地方有两个。一个是蛇的“空间传送”。如何处理从a[0][k]到a[long-1][k]位置的行动。另一个是最后的比较,因为他要求全部出洞。而最后判断成功时尾巴一定是在洞口。所以可以直接把出生位置看成一个障碍(但是仍然从这里开始dfs),把长度-1.   还要注意,走到食物上时,长度会增加1,可以等效成“位置变化,长度不变”,来继续讨论。(因为如果改变全局变量mb的值,就会对dfs产生影响)

codeforce gym/100495/problem/F Snake++——DFS应用的更多相关文章

  1. codeforce gym/100495/problem/K—Wolf and sheep 两圆求相交面积 与 gym/100495/problem/E—Simple sequence思路简述

    之前几乎没写过什么这种几何的计算题.在众多大佬的博客下终于记起来了当时的公式.嘚赶快补计算几何和概率论的坑了... 这题的要求,在对两圆相交的板子略做修改后,很容易实现.这里直接给出代码.重点的部分有 ...

  2. Codeforces Gym 100500F Problem F. Door Lock 二分

    Problem F. Door LockTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/at ...

  3. Codeforces Gym 100002 Problem F "Folding" 区间DP

    Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/ ...

  4. Codeforces Gym 100286F Problem F. Fibonacci System 数位DP

    Problem F. Fibonacci SystemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...

  5. codeforces Gym 100187J J. Deck Shuffling dfs

    J. Deck Shuffling Time Limit: 2   Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...

  6. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem F. Judging Time Prediction 优先队列

    Problem F. Judging Time Prediction 题目连接: http://www.codeforces.com/gym/100253 Description It is not ...

  7. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题

    Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...

  8. Gym - 100187J J - Deck Shuffling —— dfs

    题目链接:http://codeforces.com/gym/100187/problem/J 题目链接:问通过洗牌器,能否将编号为x的牌子转移到第一个位置? 根据 洗牌器,我们可以知道原本在第i位置 ...

  9. 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥

    Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...

随机推荐

  1. windows环境下 curl 安装和使用

    curl下载地址:https://curl.haxx.se/download.html,拉到页面最底下,选择红色选中的那个CAB的进行下载,如下图所示: 下载完成后,解压. 解决windows控制台c ...

  2. rabbitMq 教程

    https://github.com/401Studio/WeekLearn/issues/2 目录 RabbitMQ 概念 exchange交换机机制 什么是交换机 binding? Direct ...

  3. 新做了块avr开发板--tft屏研究用

    2010-05-04 14:03:00 测试效果不错,使用也方便.

  4. CRM rbac 组件的应用

    1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...

  5. 用Javascript,DHTML控制表格的某一列的显示与隐藏

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  6. 51Nod 1090 3个数和为0

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...

  7. python-数据分析与展示(Numpy、matplotlib、pandas)---2

    笔记内容整理自mooc上北京理工大学嵩天老师python系列课程数据分析与展示,本人小白一枚,如有不对,多加指正 1.python自带的图像库PIL 1.1常用API  Image.open()    ...

  8. 怎样从外网访问内网IIS?

    本地安装了一个IIS,只能在局域网内访问,怎样从外网也能访问到本地的IIS呢?本文将介绍具体的实现步骤. 准备工作 安装并启动IIS 默认安装的IIS端口是80. 实现步骤 下载并解压holer软件包 ...

  9. Web开发笔记 #08# Jackson组合多个对象的属性构成JSON(以及添加自定义属性)

    参考文档:https://github.com/FasterXML/jackson-databind 关于ObjectMapper的线程安全 截自官方文档: 组合多个对象的属性构成JSON(以及添加自 ...

  10. pyglet StaticSource

    for i in range(10): self.player2.queue(pyglet.media.StaticSource(pyglet.media.load('2.mp3')))