题目链接

这道题被稍微改编当作过去年的期末上机题,也被直接放到了这次这一届的第二次练习赛。当初刚看到这道题时DFS并没有系统的学过,做起来极其费劲。现在学过之后开始实践练习,发现这道题真的是很水。

我的DFS函数中加入了方向,和拐弯数两个参数,作为判断。(其实是放在外面当全局变量自己控制不好的借口orz),并将vi这个数组存储为到达这个位置时最少的拐弯数,这样大于vi到达这里并且vi不是初始值-1的就直接剪枝。

 #include<cstdio>
#include<cstring>
using namespace std;
int a[][],n,m,vi[][],dir[][]={{,},{-,},{,},{,-}},ci,flag,ei,ej;
void dfs(int si,int sj,int d,int x)
{
if(si==ei&&sj==ej&&x<=)//看是否成功到达终点
{flag=;return;}
if(si<||si>=n||sj<||sj>=m||x>||(x>vi[si][sj]&&vi[si][sj]!=-)||a[si][sj]!=||flag==)//几个预先判断
return;
else
{
a[si][sj]=;
vi[si][sj]=x;//注意将vi存储为到这个位置所经历的拐弯数
for(int i=;i<;i++)
{
if(i==d)dfs(si+dir[i][],sj+dir[i][],i,x);//有两种情况,继续沿着之前的方向前进的话拐弯数不变,不然就+1
else
dfs(si+dir[i][],sj+dir[i][],i,x+);
}
a[si][sj]=;
}
}
int main()
{
while(scanf("%d%d",&n,&m))
{
if(n==&&m==)
break;
int i,j,si,sj;
for(i=;i<n;i++)
for(j=;j<m;j++)
scanf("%d",&a[i][j]);
scanf("%d",&ci);
while(ci--)
{
memset(vi,-,sizeof(vi));//将数组初始化为-1这个之后不可能取到的值有助于判断
scanf("%d%d%d%d",&si,&sj,&ei,&ej);
si--;
sj--;
ei--;
ej--;
flag=;
if(a[si][sj]!=a[ei][ej]||(a[si][sj]==)||a[ei][ej]==)//如果是不需dfs就能判断的不成立情况就直接continue
{
printf("NO\n");
continue;
}
else
{
for(i=;i<;i++)
dfs(si+dir[i][],sj+dir[i][],i,);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
}
return ;
}

当初做起来非常困难的题目现在可以不到10分钟轻松做出来,进步的喜悦真的是难以描述。还有很多的内容需要学习与练习,继续加油!

(DFS)hdoj1175:连连看的更多相关文章

  1. HDOJ1175连连看 DFS

    连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. hdoj1175 连连看(dfs+剪枝)

    处理连连看问题. 要求拐弯方向不多于两次.剪枝很重要!!! 用dir记录当前方向.Orz,居然没想到. #include<iostream> #include<cstring> ...

  3. [HDOJ1175]连连看

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)     ...

  4. JavaScript编写连连看

    这几天写题比较少,做了一下网页设计的期末大作业.搞了个连连看,核心代码和hdu 1175那个题目一样. 越来越觉得学ACM是十分有用的,软件的核心是数据结构和算法,学会了DFS,连连看就水到渠成了. ...

  5. 连连看游戏(dfs)【华为上机题目】

    1 连连看游戏 今天同学给我做了道编程题目,貌似是华为的,题目描述大概是这样的: 给定一个连连看棋盘,棋盘上每个点都有各种图案(用非0数字表示),输入棋盘上的任意两个左标,判断这两个坐标对应的图案是否 ...

  6. HDU1175 连连看(DFS)

    Problem Description “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经 ...

  7. 连连看(dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)     ...

  8. hdu 1175(BFS&DFS) 连连看

    题目在这里:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大家都很熟悉的连连看,原理基本就是这个,典型的搜索.这里用的是广搜.深搜的在下面 与普通的搜索 ...

  9. hdu1175连连看(dfs+细节)

    连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. numpy库的常用知识

    为什么有numpy这个库呢?准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2, ...

  2. 对于syncedmen类的代码分析

    对于数据在cpu与GPU之间同步的问题,caffe中用syncedMemory这个类来解 决:在GPU模式下,并且使用CUDA时,可以用CaffeMallocHost函数与CaffeFreeHost函 ...

  3. 3 javascript

    3 javascript javascript基础 html: 负责了一个页面的结构.   css: 负责了一个页面的样式.    javascript: 负责与用户进行交互. 1997年欧洲的计算机 ...

  4. HTML介绍、文档基本结构、meta标签、HTML标记的语法

    一.HTML的介绍 Hyper Text Mark-up Language 超文本标记语言,是一种描述性标记语言(不是编程语言),主要用于描述网页(可以有图像,文字,声音,等..)但没有交互性 HTM ...

  5. xcode6 AsynchronousTesting 异步任务测试

    xcode集成了非常方便的测试框架,XCTest 在xcode6之后,提供了 <XCTest/XCTestCase+AsynchronousTesting.h> 利用此我们可以直接在XCT ...

  6. 【EPplus】Column width discrepancy

    description Hi Jan, I have noticed that when I set a column width there is a discrepancy between the ...

  7. Compound Interest Calculator3.0续

    1.你写的程序能让客户随意操作吗?误输入数据.不小心做了非常规的操作程序是什么反应? 2.如果向银行贷款10万元,年利率6.5%,期限为10年,那么每月等额本息还款多少?(算复利条件下等额还款金额) ...

  8. Linux基础: 网络命令和进程管理

    ​  netstat lsof ps pstree pkill/kill (了解jenkins git,排查环境) 查询服务器之间是否有链接(netstat -an) 某个服务是否启动(了解服务对应的 ...

  9. (03)odoo模型/记录集/公用操作

    -----------------更新时间11:17 2016-09-18 星期日11:00 2016-03-13 星期日09:10 2016-03-03 星期四11:46 2016-02-25 星期 ...

  10. viewDidLoad && loadView

    viewDidLoad 方法在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成. loadView 方法在控制器的 view ...