题目链接: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. input文本框 放上图片img 通过padding relative和absolute 的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Window Mysql 5.7.18安装

    1:下载地址 https://dev.mysql.com/downloads/mysql/ 点击Community , 然后点击Community Server 位置, 下载 安装包 2: 配置环境变 ...

  3. 17 网络编程 C/S架构介绍

    1.什么是C/S架构 C指的是client(客户端软件),S指的是Server(服务器软件),本章的重点是教大家写一个C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 2.计算机基础的知识- ...

  4. ==、is

    ==.is 总结 is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象的值是否相等(值比较).

  5. docker问题

    Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work. 解决办法: # vim /usr/lib/sysctl ...

  6. samtools 的应用

    1)sam转bam samtools view -bS in.sam > in.bam -b 意思使输出使BAM format -S 意思使输入使SAM,如果@SQ 缺剩, 要写-t

  7. Zookeeper 注册中心

    一.Zookeeper的介绍 Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...

  8. jQuery源码解读一

    (function(window,undefined){...})(window); 这是一个典型的自执行的匿名函数. 为什么会有一个名为undefined的形参呢? undefined不是常量,可以 ...

  9. input上传图片

    1.通过input自身的onchange事件触发: <input id="file" type="file" accept="image/*&q ...

  10. js简单校验form表单

    /** * 数据简单校验 */ function checkData (formId) { var check = true; var emailReg = new RegExp("^[a- ...