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. Apache+Tomcat+Memcached实现会话保持

    会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...

  2. 【Linux学习八】脚本编程

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.多层bash#.和source都是当前bash [root@nod ...

  3. mysql 创建用户,删除用户,增加权限

    1,查询mysql 数据库已经存在的用户: SELECT USER,HOST FROM MYSQL.USER; 2,创建mysql 用户: '; USERNAME:用户名 HOST:主机,PASSWO ...

  4. Njinx配置

    参考地址: NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin NGINX的中文网站:http://www.nginx.c ...

  5. nginx tomcat https

    .首先确保机器上安装了openssl和openssl-devel #yum install openssl #yum install openssl-devel . server { listen s ...

  6. Installing Android Studio

    To set up Android Studio on Windows: Launch the .exe file you just downloaded. Follow the setup wiza ...

  7. 安装DotNetCore.1.0.0-VS2015Tools.Preview2一直失败,如何解?

    首先要说明的一点是,本地的VS2015的环境已经安装完成,而且vs2015.3也已经更新完成了,这个环境应该是没啥问题.但是安装.DotNetCore.1.0.0-VS2015Tools.Previe ...

  8. oracle goldengate 远程捕获和投递

    很早之前,OGG只支持部署在数据库主机上,这叫本地化部署.而现在OGG支持远端部署,即OGG软件不安装在数据库主机上,而是安装在单独的机器上,负责数据抽取和投递. 这样做的好处: l 易于管理 - 在 ...

  9. 大数据自学1-CentOS 下安装CDH及Cloudera Manager

    前面花了一段时间将Ubuntu,Hadoop装完,装到Hbase时,发现Hbase 与Hadoop是有兼容性问题的,Hbase 2.1版是不支持Hadoop 3.11版的,怪不得装起来那么多问题了. ...

  10. 算法笔记 #007# Backtracking

    留着备用. 题目描述和代码参考:https://www.geeksforgeeks.org/8-queen-problem/ NQueenProblem(js代码): class NQueenProb ...