大钉骑马走江湖 (bfs)
来源:互联网 发布:看门狗2重要数据 编辑:程序博客网 时间:2024/05/01 22:07
江湖是什么,对于在象棋界厮杀的大钉来说,江湖就是一个矩阵,他的目标,就是在江湖之中骑着马,从他的位置出发,走到终点。
当然,大钉的马也遵从中国象棋中的“马走日”的规则,而且在矩阵中,也会有一些障碍物,马不能跳到障碍物上;如果大钉的马面前有障碍物,即被“别马腿”,那么他将不能跳向有障碍物的左前和右前这两个方向。
请问最少需要多少步,大钉才能骑着马跳到终点。
输入格式:
有多组测试样例。
每组第一行输入两个数 n 和 m,代表矩阵的行数和列数,2≤n≤m<100。
接下来输入 n 行字符串,其中 's' 代表起点,'e' 代表终点,'.' 代表空地,'#' 代表障碍物。
输出格式:
对应每组输入,输出骑马跳到终点的最小步数,如果跳不到终点,输出 −1。
样例输入
3 3s.......e3 3s#....#.e
样例输出
4-1
思路:
挡住马脚的情况不走,然后就按日的方式跳
代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<string.h>#include<queue>using namespace std;int dir[8][2]={-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1};int dir2[4][2]={-1,0,0,1,1,0,0,-1};char map[101][101];int n,m,cnt;struct st{int x,y,c;};queue <struct st> Q;int check(int x,struct st s){int xx,yy;switch(x) //如果大钉的马面前有障碍物返回真 {case 0:case 7:xx = s.x+dir2[0][0];yy = s.y+dir2[0][1];if (xx<0||yy<0||xx>=n||yy>=m||map[xx][yy]=='#') return 1;return 0;case 1:case 2:xx = s.x+dir2[1][0];yy = s.y+dir2[1][1];if (xx<0||yy<0||xx>=n||yy>=m||map[xx][yy]=='#') return 1;return 0;case 3:case 4:xx = s.x+dir2[2][0];yy = s.y+dir2[2][1];if (xx<0||yy<0||xx>=n||yy>=m||map[xx][yy]=='#') return 1;return 0;case 5:case 6:xx = s.x+dir2[3][0];yy = s.y+dir2[3][1];if (xx<0||yy<0||xx>=n||yy>=m||map[xx][yy]=='#') return 1; return 0;}}int bfs(struct st s, struct st e){int i,j,xx,yy,flag,v[101][101]={0};struct st temp;s.c = 0;Q.push(s);v[s.x][s.y] = 1;while (!Q.empty()){s = Q.front();Q.pop();if (s.x == e.x && s.y ==e.y) return s.c;for (i=0; i<8; i++){if (check(i,s)){continue;}temp.x = s.x + dir[i][0];temp.y = s.y + dir[i][1];if (temp.x<0||temp.y<0||temp.x>=n||temp.y>=m||map[temp.x][temp.y]=='#'||v[temp.x][temp.y]) continue;temp.c = s.c+1;v[temp.x][temp.y] = 1;Q.push(temp);}}return -1;}int main(){int i,j;struct st s,e;while (cin>>n>>m){getchar();cnt = -1;memset(map,0,sizeof(map));while (!Q.empty()){Q.pop();}for (i=0; i<n; i++){for (j=0; j<m; j++){cin>>map[i][j];if (map[i][j]=='s'){s.x = i;s.y = j;}if (map[i][j] == 'e'){e.x = i;e.y = j;}}}cnt = bfs(s,e);cout<<cnt<<endl;}return 0;}
0 0
- 大钉骑马走江湖 (bfs)
- 大钉骑马走江湖【bfs】
- C++ - 计蒜客 - 大钉骑马走江湖(bfs)
- 大钉骑马走江湖
- 大钉骑马走江湖
- 大钉骑马走江湖
- 大钉骑马走江湖 (计蒜客)
- 计蒜客-大钉骑马走江湖
- 计蒜客 11064 大钉骑马走江湖
- 北京林业大学 “计蒜客”杯程序设计竞赛 网络赛 B. 大钉骑马走江湖 BFS
- BFS — 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 —— 大钉骑马走江湖
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 B-大钉骑马走江湖【bfs】
- 大钉骑马走江湖 北京林业大学校赛。
- 计蒜客————大钉骑马走江湖
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 B. 大钉骑马走江湖 (广搜)
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 常见问题——大钉骑马走江湖
- 第二届北京林业大学“计蒜客”杯程序设计竞赛 B题 大钉骑马走江湖
- 第二届北京林业大学“计蒜客”杯程序设计竞赛 Problem B - 大钉骑马走江湖
- VPN国内与国外网站转发至不同的DNS服务器解析,国内IP不经VPN
- Target Sum
- 我的Java学习之旅
- dubbo配置文件解读
- 在Windows上玩TensorFlow(使用Docker安装pull国内镜像)
- 大钉骑马走江湖 (bfs)
- 【Unity Shader】永远的主视图
- 装饰设计模式和开放-封闭原则
- VS2010-Debug&Release烦人的问题记录
- 新浪微博mid base62进制转10进制
- 获取iframe中的内容
- iOS 【iOS 10之后tabBar顶部黑线如何去掉】
- 欢迎使用CSDN-markdown编辑器
- 虚拟机