链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=555

题意:一个n*n格的棋盘,从1标号到n*n。从1开始走,每次投色子,可走1到6步中的任意一个步数,问最少投几次色子可到最后一格。其中有两种特殊通道,蛇和梯子,在蛇头所在的格子可以直接走到蛇尾所在的格子,在梯子底端所在的格子可以直接走到梯子顶端所在的格子。

思路:由于蛇和梯子作用是一样的,所以可以把它们看成一种。又由于蛇和梯子是不会重合的,所以它们不可能在同一个位置出现。故可以用barrier[x]数组来保存在特殊位置x处可以到达的位置y。grid[]数组来保存走的状态,-1表示不会走到,其它的数字表示最先可以到达该格子的投色子的次数。比如说某格子i在第一次投色子的过程中可以到达,标记为1,然后在对其他格子进行扩展的过程中,又可以到达格子i,此时不再更新grid[i],若果更新了的话,就会使所需要的投色子的次数变多。还有需要注意的是,格子的标号是从1开始的,一不小心就错了。

代码交上去一直re,不明所以,求大神指点。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;const int maxn=25*25;
int grid[maxn];
int barrier[maxn];int main()
{int d,n,s,l;int x,y,step;scanf("%d",&d);while(d--){step=0;memset(grid,-1,sizeof(grid));memset(barrier,0,sizeof(barrier));scanf("%d%d%d",&n,&s,&l);for(int i=1;i<=s+l;i++)//从1开始的
        {scanf("%d%d",&x,&y);barrier[x]=y;}grid[1]=0;while(grid[n*n]==-1){for(int i=1;i<=n*n-1;i++){if(grid[i]==step){for(int j=1;j<=6;j++){x=i+j;if(x>n*n) break;if(barrier[x]!=0)x=barrier[x];if(grid[x]==-1)//避免重复grid[x]=step+1;//  cout<<x<<' '<<grid[x]<<endl;
                    }}}step++;}printf("%d\n",step);}return 0;
}

转载于:https://www.cnblogs.com/54zyq/archive/2013/05/16/3082490.html

Snake Ladders bfs相关推荐

  1. hdu5025(bfs,状态压缩)

    Saving Tang Monk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. HDU 5025:Saving Tang Monk(BFS + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Problem Description <Journey to t ...

  3. LightOJ 1151 Snakes and Ladders (期望DP + 高斯消元)

    Description 'Snakes and Ladders' or 'Shap-Ludu' is a game commonly played in Bangladesh. The game is ...

  4. 实时实例分割的Deep Snake:CVPR2020论文点评

    实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...

  5. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  6. HDU1548:A strange lift(Dijkstra或BFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...

  7. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  8. usaco Overfencing 穿越栅栏(BFS)

    Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...

  9. 数据结构--搜索BFS

    文章目录 广度优先搜索 典型例题 广度优先搜索 广度优先搜索类似于树的层次遍历过程.它需要借助一个队列来实现.如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1.v2. ...

最新文章

  1. wordpress android,WordPress for Android 2.0 试用记
  2. python一个月能学成嘛-0基础学Python,1个月写爬虫,走了哪些弯路?
  3. linux.调整收发队列,linux消息队列通信
  4. 【python】list,dict赋值不要用等号,要用extend,update
  5. 利用ComplexHeatmap绘制热图(一)
  6. oracle日期函数2!
  7. 在搭建tesseract-OCR环境中遇到问题和反省
  8. Mugeda(木疙瘩)H5案例课—快闪制作-岑远科-专题视频课程
  9. 学习笔记(1):FFmpeg打造Android万能音频播放器-实现变速变调功能(二)
  10. Python - 安装sentencepiece异常
  11. IOS音视频(四十五)HTTPS 自签名证书 实现边下边播
  12. Java实现仿win10计算器
  13. matlab向量与x正方向的夹角_matlab 一个向量和矩阵中各行向量的夹角余弦值
  14. 几种抽奖方式之轮盘抽奖
  15. kubeadm join时报错Unauthorized
  16. Python中%是什么意思?如何使用?
  17. python输出时间代码_Python获取世界多地时间怎么写代码呢?
  18. 2011年最新企业offer
  19. 亚马逊为什么能够成为创新力最强的公司
  20. 获取QQ所有的表情包,包括emoji,动态gif

热门文章

  1. am335x 电容屏驱动添加。
  2. 关于UML中逻辑模型的工具的详细介绍
  3. 网格成就Web 2.0存储时代的路易XIV?
  4. Web.config中创建自定义配置节
  5. cassandra 数据量_Cassandra和Spark的数据处理简介
  6. linux代理过载命令_我们基于Linux的机器人的未来,数据过载和管理以及更多新闻
  7. 开源项目面试重要吗_您的开源故事很重要
  8. res.data.data_在Data.gov进行幕后推销
  9. (43)前端工程化总结
  10. (23)npm项目发布