hdoj 1175 (bfs)
题意:
判断两点之间是否可以通过至多有两次转变方向以达到相连,就是平时玩的连连看游戏,但是不能从外面绕过去。
思路:bfs,给每个加入的队列的点添加转变方向次数turn和点当前要走的方向dir属性,起点可以走四个方向。
参照代码来源:
我的代码,参照写得,加深练习和理解:
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int M = ;
int map[M][M];
int has[M][M];
struct node
{
int x,y;
int turn;
int dir;
};
int dire[][] = {{,},{,},{,-},{-,}};
queue <node> q;
int n,m;
int sx,sy,ex,ey;
struct node st;
bool flag;
inline bool in(const node &p)
{
if ((p.x< || p.y< || p.x>=n || p.y>=m))
return false;
return true;
}
void bfs()
{
node now,t;
while (!q.empty())
{
now = q.front();
q.pop();
//cout << now.x << " " << now.y << " " << now.turn << " " << now.dir <<endl;
if (now.x == ex && now.y == ey && now.turn<=) //满足条件退出
{
flag = true;
return;
}
for (int i = ; i < ; i++)
{
if((now.dir+)% == i) continue;
t.x=now.x+dire[i][],t.y=now.y+dire[i][];
if(i == now.dir) //now的点和下一个走的点的方向相同
t.turn=now.turn,t.dir=now.dir;
else
t.turn=now.turn+,t.dir=i;
//if ((t.x>=0 && t.x < n && t.y>=0 && t.y<m) && (map[t.x][t.y] == 0|| (t.x == ex&&t.y == ey))&& (has[t.x][t.y]>=t.turn)) //如果不用in()函数的话我之前是这么写的
if (in(t) && (map[t.x][t.y] == || (t.x == ex && t.y == ey))&& (has[t.x][t.y]>=t.turn) && t.turn <= ) // 加入队列条件
{
has[t.x][t.y] = t.turn;
q.push(t);
}
}
}
} int main()
{
while (cin >> n >> m && n && m)
{
for (int i = ;i < n;i++)
{
for (int j = ;j < m;j++)
cin >> map[i][j];
}
int tt;
cin >> tt;
for (int i = ;i < tt;i++)
{
cin >> sx >> sy >> ex >> ey;
sx--,sy--,ex--,ey--;
//printf("%d %d %d %d\n",sx,sy,ex,ey);
if ((sx == ex && sy == ey)|| map[sx][sy] == || map[ex][ey] == ||map[sx][sy] != map[ex][ey]) //判断输入的两点是否合法:是否相等,是否为0...
{
puts("NO");
continue;
}
for (int i = ;i < n;i++)
for (int j = ;j < m;j++)
has[i][j] = ;
while(!q.empty())
q.pop();
for (int i = ;i < ;i++)
{
st.x = sx,st.y = sy,st.turn = ,st.dir = i; //起点的四个方向都要加入队列
q.push(st);
}
has[sx][sy] = ;
flag = false;
bfs();
if(flag)
cout << "YES\n";
else cout << "NO\n";
}
}
return ;
}
hdoj 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 ( ...
- hdoj 1175 连连看
连连看 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- BFS(八数码) POJ 1077 || HDOJ 1043 Eight
题目传送门1 2 题意:从无序到有序移动的方案,即最后成1 2 3 4 5 6 7 8 0 分析:八数码经典问题.POJ是一次,HDOJ是多次.因为康托展开还不会,也写不了什么,HDOJ需要从最后的状 ...
- HDU(1175),连连看,BFS
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1175 越学越不会,BFS还是很高级的. 连连看 Time Limit: 20000/100 ...
- BFS+贪心 HDOJ 5335 Walk Out
题目传送门 /* 题意:求从(1, 1)走到(n, m)的二进制路径值最小 BFS+贪心:按照标程的作法,首先BFS搜索所有相邻0的位置,直到1出现.接下去从最靠近终点的1开始, 每一次走一步,不走回 ...
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
- hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...
随机推荐
- 初识SuperSocket
有一些企业由于以前使用的操作系统是被淘汰的操作系统,例如OpenVMS.现需要将针对openvms开发的通讯程序进行移植到现在的windows操作系统上,通过一段时间的了解,现在需要花时间去找商业性的 ...
- Java自然语言处理NLP工具包
1. Java自然语言处理 LingPipe LingPipe是一个自然语言处理的Java开源工具包.LingPipe目前已有很丰富的功能,包括主题分类(Top Classification).命名实 ...
- eclipse安装git插件
用Eclipse开发,有时需要团队协作,git就是个比较好的选择.下面简单介绍一下git插件的安装方法: 1.Help -- install new software 打开插件安装界面 2.点ad ...
- selenium相关面试题
selenium中如何判断元素是否存在? selenium中hidden或者是display = none的元素是否可以定位到? selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元 ...
- WebForm 控件(一)、连接数据库
一.控件 [简单控件] (一)文字显示 1.Label → 在html中相当于span <asp:Label ID="控件名 runat="server" Tex ...
- js精要之对象属性
// 对象的应用解除 将对象变量置为null(在写插件多大型项目是不要忘记解除对象占用) var object1 = new Object(); var object2 = object1; // 对 ...
- 学习window系统下的注册表
一直不明白注册表是一个什么鬼,查了资料后大概明白了注册表到底有什么用,其实简单来说注册表就是一个存放系统.硬件.应用配置信息的数据ku.##### 一.注册表的来历在最早的视窗操作系统win3.x中, ...
- SQLSERVER 中实现类似Mysql的 INSERT ON DUPLICATE KEY UPDATE
通过SQLServer创建索引时,有一个IGNORE_DUP_KEY的选项,可以类似实现. IGNORE_DUP_KEY = { ON | OFF } 指定对唯一聚集索引或唯一非聚集索引执行多行插入操 ...
- WPF DEV CellTemplateSelector(一个正确使用DevExpress CellTemplateSelector的Demo)
说明 我在项目中根据需求需要用到WPF Dev CellTemplateSelector时,遇到不少坑.曾一度想要放弃使用模板转换器,但又心有不甘,终于在不断努力下,达到了需求的要求.所以写下来和大家 ...
- 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理
分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前, ...