就是搜。

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define maxn 22
int fang[][]={{,},{,},{,-},{-,}};
int map[maxn][maxn],vis[maxn][maxn][][],n;
struct node
{
int count;//计数
int way;//方向
int x;
int y;
int flag;//是否拿到金子
};
int ok(int x,int y)
{
if(x<||x>=n||y<||y>=n||map[x][y]==||map[x][y]==)
return ;
return ;
}
int bfs()
{
int i,j;
queue<node>q;
node temp,t;
memset(vis,,sizeof(vis));
temp.x=temp.y=temp.flag=temp.count=;
temp.way=;
q.push(temp);
vis[][][][]=;
while(!q.empty())
{
temp=q.front();
q.pop();
if(temp.count>)
return -;
if(map[temp.x][temp.y]==&&!temp.flag)
{
temp.count++;
temp.flag=;
vis[temp.x][temp.y][temp.way][temp.flag]=;
q.push(temp);
continue;
}
if(temp.x==&&temp.y==&&temp.flag)
{
return temp.count+;
}
for(i=-;i<;i++)
{
if(i==)
{
t.count=temp.count+;
t.flag=temp.flag;
t.way=temp.way;
t.x=temp.x+fang[t.way][];
t.y=temp.y+fang[t.way][];
}
else
{
t.count=temp.count+;
t.flag=temp.flag;
t.way=temp.way+i+;
t.way%=;
t.x=temp.x;
t.y=temp.y;
}
if(!vis[t.x][t.y][t.way][t.flag]&&ok(t.x,t.y))
{
vis[t.x][t.y][t.way][t.flag]=;
q.push(t);
}
}
}
return -;
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(map,,sizeof(map));
while()
{
int x,y,z;
scanf("%d%d%d",&z,&x,&y);
if(z==-&&y==-&&x==-)
break;
map[x][y]=z;
}
if(map[][]==)
{
printf("-1\n");
continue;
}
int ans=bfs();
if(ans==-)
printf("-1\n");
else if(-*ans<)
printf("-1\n");
else
printf("%d\n",-*ans);
}
}
/*
1
2
3 1 1
-1 -1 -1
*/

zoj3890 BFS的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotion模拟器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. java 14 -6 BigInteger和BigDecimal

    BigInteger:可以让超过Integer范围内的数据进行运算 构造方法: BigInteger(String val) import java.math.BigInteger; public c ...

  4. View (四)视图状态及重绘流程分析

    相 信大家在平时使用View的时候都会发现它是有状态的,比如说有一个按钮,普通状态下是一种效果,但是当手指按下的时候就会变成另外一种效果,这样才会给 人产生一种点击了按钮的感觉.当然了,这种效果相信几 ...

  5. 看ImplicitBackwardEulerSparse关于static solve的代码

    当选择static solve的时候,求解的流程如下: 1.获得内力 2.qresidual = 外力-内力,qdelta = qresidual, qdelta的非约束元素赋给bufferConst ...

  6. HBuilder打包ios应用

    1先安装itunes在电脑上 2,在HBuilder的工具栏上的"工具"选项卡上安装ios插件

  7. where,having与 group by连用的区别

    select 列a,聚合函数 from 表名 where 过滤条件 group by 列a having 过滤条件 group by 字句也和where条件语句结合在一起使用.当结合在一起时,wher ...

  8. PATH路径出错导致任何命令都找不到解决方法

    1.export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin这样可以保证命令行命令暂时可以使用.命令执行完之后先不要关闭终端或者cd /usr/ ...

  9. MySQL 约束的讲解

    MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...

  10. 使用dynamic获取类型可变的json对象

    标题可能有点含糊不清 我这个例子的来源是,对方会返回给我json,不过成功的json与失败的json是不同的对象 我想用一个方法获取到这个对象的所有属性并打印到log中 因为是动态变化的,所以第一个想 ...