*传送

求最小步数,bfs求解。因为题目要求可以走八个方向(上下左右和对角线),所以两个方位数组来找八个方向

  int dirx[9]={0,0,1,1,1,0,-1,-1,-1};

  int diry[9]={0,-1,-1,0,1,1,1,0,-1};

开一个结构体,表示当前节点的横纵坐标、步数、和它从哪个方向来。

  }nowid,nextid; 

vis数组记录当前节点是否向某一方向走过 vis[x][y][way]x表示横坐标,y表示纵坐标,way表示方向(方位数组的角标)

从当前节点,可以向某一方向直接跨越当前节点所表示节点个数,所以当前节点能走到的位置为

  nextid.x=nowid.x+dirx[i]*map[nowid.x][nowid.y];
    nextid.y=nowid.y+diry[i]*map[nowid.x][nowid.y];

判断下个位置是否在当前方向走过,是否越界,若位置合理,步数+1,标记走过,并记录方向(因为两次不能走同个方向),剩下的就和bfs的板子一模一样了

代码:

 #include <iostream>
 #include <algorithm>
 #include <cstdio>
 #include <queue>
 using namespace std;
 int n,m;
 ][];
 ][][];
 ;
 ]={,,,,,,-,-,-};
 ]={,-,-,,,,,,-};
 struct node{
     int x,y,step,way;
 }nowid,nextid;
 void bfs(int x,int y){
     queue<node> q;
     nowid.x=x,nowid.y=y,nowid.step=,nowid.way=-;
     q.push(nowid);
     while (!q.empty()){
         nowid=q.front();q.pop();
         if (nowid.x==m&&nowid.y==n){
             flag=;
             printf ("%d\n",nowid.step);
             return;
         }
         nextid=nowid;
         ;i <= ;i++){
             if (nowid.way!=i){
                 nextid.x=nowid.x+dirx[i]*map[nowid.x][nowid.y];
                 nextid.y=nowid.y+diry[i]*map[nowid.x][nowid.y];
                 &&nextid.x<=m&&nextid.y>=&&nextid.y<=n&&!vis[nextid.x][nextid.y][i]){
                     vis[nextid.x][nextid.y][i]=;
                     nextid.step=nowid.step+;
                     nextid.way=i;
                     q.push(nextid);
                 }
             }
         }
     }
 }
 int main(){
     scanf ("%d%d",&n,&m);
     ;i <= m;i++)
         ;j <= n;j++)
             scanf ("%d",&map[i][j]);
     bfs(,);
     if (!flag) cout<<"NEVER"<<endl;
     ;
 }

bfs--P1301 魔鬼之城的更多相关文章

  1. 洛谷 P1301 魔鬼之城

    P1301 魔鬼之城 题目描述 在一个被分割为N*M个正方形房间的矩形魔鬼之城中,一个探险者必须遵循下列规则才能跳跃行动.他必须从(1, 1)进入,从(N, M)走出:在每一房间的墙壁上都写了一个魔法 ...

  2. 洛谷P1301 魔鬼之城 题解

    想找原题请点击这里:传送门 题目描述 在一个被分割为N*M个正方形房间的矩形魔鬼之城中,一个探险者必须遵循下列规则才能跳跃行动.他必须从(, )进入,从(N, M)走出:在每一房间的墙壁上都写了一个魔 ...

  3. 洛谷P1301 魔鬼之城

    传送门啦 一道广度优先搜索的题目. 结构体含义: struct node{ int x,y,dir;//坐标,方向 int step;//当前步数 }; 方向的标号受上面定义的 $ dx[ ] , d ...

  4. vijos p1777 引水入城(bfs+贪心)

    引水入城   描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...

  5. NOIP2010_T4_引水入城 bfs+贪心

    在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度.为了使 ...

  6. 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)

    1066 引水入城 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在一个遥远 ...

  7. luoguP1514 引水入城 题解(NOIP2010)(Bfs+贪心)

    P1514 引水入城  题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...

  8. NOIP2010引水入城[BFS DFS 贪心]

    题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...

  9. noip2010 引水入城 bfs+贪心

    如果能够实现,每个河边的城市对应的控制区域一定是一条线段. 所以直接bfs每个河边的城市,贪心线段的右端点 #include<cstdio> #include<cstring> ...

随机推荐

  1. 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题

    由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...

  2. docker幕布笔记

    幕布链接>>>>https://mubu.com/doc/l_KDT3S5w0

  3. windos常见软件库

    1.护卫神软件库 http://soft.huweishen.com/special/1.html 2.护卫神windows资料库 http://v.huweishen.com/ 3.国超软件下载 h ...

  4. ffmpeg 学习: 003-关键函数介绍

    背景 了解一些关键函数对于开发的帮助比较大. avformat_open_input FFMPEG 打开媒体的过程开始于 avformat_open_input,因此该函数的重要性不可忽视. 在该函数 ...

  5. Codeforces 591 B:Rebranding

    B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. loadBeanDefinitions方法源码跟踪(二)

    因为字数超过了限制,所以分成了三篇,承接上篇: https://www.jianshu.com/p/a0cfaedf3fc5 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 3.parseDef ...

  7. 云时代架构阅读笔记十一——数据库SQL优化

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...

  8. .net core文件系统简介

    在asp.net core程序中,我们可以通过如下代码开启对Web 根目录内的文件静态访问功能: app.UseStaticFiles(); 如果要提供更高级的选项,例如:将其它的物理文件夹下的文件作 ...

  9. thread.start和threadstart.invoke的区别

    new Thread(() =>refreshDGVdelegate(App.StockList)).Start();//在新线程中执行操作 new ThreadStart(() => r ...

  10. ios端简单改变webView的黑白夜模式

    extension HTController:WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler { func userContentC ...