hdu-1175(bfs+剪枝)
题目链接: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+剪枝)的更多相关文章
- hdu 1175(BFS&DFS) 连连看
题目在这里:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大家都很熟悉的连连看,原理基本就是这个,典型的搜索.这里用的是广搜.深搜的在下面 与普通的搜索 ...
- HDU - 1175 bfs
思路:d[x][y][z]表示以z方向走到(x, y)的转弯次数. 如果用优先队列会超时,因为加入队列的节点太多,无用的节点不能及时出队,会造成MLE,用单调队列即可. AC代码 #include & ...
- hdu 1175 bfs+priority_queue
连连看 如上图所示如果采用传统bfs的话,如果按照逆时针方向从(1,1)-->(3,4)搜索,会优先选择走拐四次弯的路径导致ans错误: Time Limit: 20000/10000 MS ( ...
- hdu_1253_胜利大逃亡(bfs+剪枝)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...
- hdu 1175
#include <iostream> #include <string> #include <stdio.h> using namespace std; int ...
- hdu 5887 搜索+剪枝
Herbs Gathering Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU-1226 超级密码 (BFS+剪枝)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...
- hdu 4531 bfs(略难)
题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...
- HDU6223 Infinite Fraction Path bfs+剪枝
Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...
- hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...
随机推荐
- J2SE 8的反射
1.获得Class的四种方式 //(1) 利用对象调用getClass()方法获取该对象的Class实例 Class<? extends ReflectTest> class1 = new ...
- postgresql 的操作
基本操作: \o /tmp/11.txt ,查询结果输出到文件 \d 查询table结构 \x 切换显示方式 postgresql中可以导出某个sql的执行结果到文件中,方法是在psql中首先执行\o ...
- unity 返回子对象组件
Component[] GetComponentsInChildren(Type t, bool includeInactive = false); //includeInactive: 是否查找非激 ...
- 播放一个wav文件
use mmsystem;SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC) ///////////////////////////////////u ...
- Path-O-LOGIC Keynote
[Path-O-LOGIC Keynote] 1. OnSpawned()OnSpawned(SpawnPool pool) 2. OnDespawned()OnDespawned(SpawnPool ...
- Python合并列表,append()、extend()、+、+=
在实际应用中涉及到了列表合并的问题. 在应用append()时,发现列表是以一个元素的形式追加到列表上的,最后查询后用的是extend()方法,下面是区别 1.append() 向列表尾部追加一 ...
- A* 算法详解
最近刷bin巨的搜索进阶专题,做到一个需要A*算法来解决的题,于是开始学A*算法,十分有用处的算法,虽然看上去听复杂的,但其实原理很容易理解,下面转自一篇文章,讲得真的很好. 转:https://ww ...
- Ubuntu dns
在Ubuntu系统网络设备启动的流程中,会依赖/etc/network/interface的配置文件初始化网络接口,所以直接在/etc/network/interface之中配置好对应的dns服务器会 ...
- rubber
rubber - 必应词典 美['rʌbər]英['rʌbə(r)] n.橡胶:橡皮:黑板擦 v.涂橡胶于…:〈美俚〉同“rubberneck” 网络橡皮擦:胶皮:橡皮轮胎 变形复数:rubbers:
- SSH框架整合jar包时的注意事项
SSH框架整合jar包时的注意事项: 在将三个框架所需的jar整合到一起后,要看一下有没有相同类型但是版本不同的jar包,如果有的话,需要把低版本的jar包删除掉,否则会报错.我这里整合的时候java ...