题目链接: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. J2SE 8的反射

    1.获得Class的四种方式 //(1) 利用对象调用getClass()方法获取该对象的Class实例 Class<? extends ReflectTest> class1 = new ...

  2. postgresql 的操作

    基本操作: \o /tmp/11.txt ,查询结果输出到文件 \d 查询table结构 \x 切换显示方式 postgresql中可以导出某个sql的执行结果到文件中,方法是在psql中首先执行\o ...

  3. unity 返回子对象组件

    Component[] GetComponentsInChildren(Type t, bool includeInactive = false); //includeInactive: 是否查找非激 ...

  4. 播放一个wav文件

    use mmsystem;SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC) ///////////////////////////////////u ...

  5. Path-O-LOGIC Keynote

    [Path-O-LOGIC Keynote] 1. OnSpawned()OnSpawned(SpawnPool pool) 2. OnDespawned()OnDespawned(SpawnPool ...

  6. Python合并列表,append()、extend()、+、+=

    在实际应用中涉及到了列表合并的问题. 在应用append()时,发现列表是以一个元素的形式追加到列表上的,最后查询后用的是extend()方法,下面是区别   1.append()  向列表尾部追加一 ...

  7. A* 算法详解

    最近刷bin巨的搜索进阶专题,做到一个需要A*算法来解决的题,于是开始学A*算法,十分有用处的算法,虽然看上去听复杂的,但其实原理很容易理解,下面转自一篇文章,讲得真的很好. 转:https://ww ...

  8. Ubuntu dns

    在Ubuntu系统网络设备启动的流程中,会依赖/etc/network/interface的配置文件初始化网络接口,所以直接在/etc/network/interface之中配置好对应的dns服务器会 ...

  9. rubber

    rubber - 必应词典 美['rʌbər]英['rʌbə(r)] n.橡胶:橡皮:黑板擦 v.涂橡胶于…:〈美俚〉同“rubberneck” 网络橡皮擦:胶皮:橡皮轮胎 变形复数:rubbers:

  10. SSH框架整合jar包时的注意事项

    SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候java ...