题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175

思路:用bfs,注意要转弯的次数,次数大于两次就跳过。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int a[][],x1,x2,y1,y2,k,n,m,vis[][];
int zz[][]={{,},{,-},{,},{-,}};
struct Node{
int x,y,num,fx;
};
bool bfs()
{
memset(vis,,sizeof(vis));
queue <Node> q;
Node tp,tmp;
tp.x=x1;tp.y=y1;
tp.fx=;tp.num=;
q.push(tp);
vis[x1][y1]=;
while(!q.empty())
{
tp=q.front();
q.pop();
//cout<<tp.x<<" "<<tp.y<<endl;
if(tp.x==x2&&tp.y==y2&&tp.num<=) return true;
for(int i=;i<;i++)
{
tmp.x=tp.x+zz[i][];
tmp.y=tp.y+zz[i][];
if(tp.fx==)
{
tmp.fx=i+;tmp.num=tp.num;
}
else
{
if(tp.fx==i+) tmp.fx=i+,tmp.num=tp.num;
else tmp.fx=i+,tmp.num=tp.num+;
}
if(tmp.num>) continue;
if(tmp.x<=||tmp.x>n||tmp.y<=||tmp.y>m) continue;
if(vis[tmp.x][tmp.y]==) continue;
if(a[tmp.x][tmp.y]==||tmp.x==x2&&tmp.y==y2)
{
vis[tmp.x][tmp.y]=;
q.push(tmp);
}
}
}
return false;
}
int main(void)
{
int i,j;
while(cin>>n>>m&&(n+m))
{
for(i=;i<=n;i++)
for(j=;j<=m;j++) cin>>a[i][j];
cin>>k;
while(k--)
{
cin>>x1>>y1>>x2>>y2;
if(a[x1][y1]!=a[x2][y2]||(a[x1][y1]==a[x2][y2]&&a[x1][y1]==)||(a[x1][y1]==a[x2][y2]&&x1==y1&&x2==y2))
{
cout<<"NO"<<endl;
continue;
}
if(bfs()==true) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return ;
}

hdu-1175(bfs+剪枝)的更多相关文章

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

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

  2. HDU - 1175 bfs

    思路:d[x][y][z]表示以z方向走到(x, y)的转弯次数. 如果用优先队列会超时,因为加入队列的节点太多,无用的节点不能及时出队,会造成MLE,用单调队列即可. AC代码 #include & ...

  3. hdu 1175 bfs+priority_queue

    连连看 如上图所示如果采用传统bfs的话,如果按照逆时针方向从(1,1)-->(3,4)搜索,会优先选择走拐四次弯的路径导致ans错误: Time Limit: 20000/10000 MS ( ...

  4. hdu_1253_胜利大逃亡(bfs+剪枝)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...

  5. hdu 1175

    #include <iostream> #include <string> #include <stdio.h> using namespace std; int ...

  6. hdu 5887 搜索+剪枝

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU-1226 超级密码 (BFS+剪枝)

    Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...

  8. hdu 4531 bfs(略难)

    题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...

  9. HDU6223 Infinite Fraction Path bfs+剪枝

    Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...

  10. hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...

随机推荐

  1. 使用IDEA开发Activiti工作流

    首先安装cativiti插件,安装成功后重启IDEA 然后在文件夹右键选择 然后就可以画图了,但是画图之后,没有连接图标怎么办呢 把鼠标放在开头的那个图标上,此时光标的形状改变了. 拖到另一个上面,连 ...

  2. 前端开发-5-HTML-总结

    1.总体 资源:https://www.processon.com/view/link/5ad1c2d0e4b0b74a6dd64f3c html head标签 title 显示网站的标题 meta ...

  3. WINFORM小列子参考

    1.用树型列表动态显示菜单   密码:zx9t 二.Popup窗口提醒(桌面右下角出现)   密码:cjjo 三.台历 密码:nq4m 四.文件复制  密码:lsqj 五.进度条  密码:byti 六 ...

  4. mongodb基础学习7-备份与恢复

    下面来讲讲mongodb的备份与恢复 备份可以备份为二进制格式,如果是用于数据交换,可以备份成json或cvs格式 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通 ...

  5. 集中化管理平台Saltstack安装配置

    salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似 ...

  6. fabric应用

    安装: easy_install fabric 或 pip install fabric 验证: #python >>> import  fabric 有时候我们可以直接使用命令行的 ...

  7. WebDriverException:Element is not clickable at point - selenium执行过程中遇到的相关报错

    Element is not clickable at point (x, y) 这段可以忽略:本文来自 https://www.cnblogs.com/lozz/p/9947430.html 引起这 ...

  8. IEdevelopToolbar ie浏览器的css代码调试工具

    使用IEdevelopToolbar的“选择元素”工具(ctrl+b),选取你要内容的地方下方的DIV,我们就可以找到几个关键字

  9. 奇偶数判断1(if,else if语句)

    public class 奇偶数判断 { public static void main(String [] args){ float s = 9f; //取单浮点型变量s,可为任意值 float h ...

  10. preset

    preset - 必应词典 美[.pri'set]英[.priː'set] v.预置:事先安排:预调:给…预定时间 网络预设:预先装置:预置位