大钉骑马走江湖
来源:互联网 发布:淘宝复制宝贝软件免费 编辑:程序博客网 时间:2024/04/24 16:45
大钉骑马走江湖
时间限制(C/C++):1000MS/3000MS 运行内存限制:65536KByte
总提交:53 测试通过:27
总提交:53 测试通过:27
描述
江湖是什么,对于在象棋界厮杀的大钉来说,江湖就是一个矩阵,他的目标,就是在江湖之中骑着马,从他的位置出发,走到终点。
当然,大钉的马也遵从中国象棋中的“马走日”的规则,而且在矩阵中,也会有一些障碍物,马不能跳到障碍物上;如果大钉的马面前有障碍物,即被“别马腿”,那么他将不能跳向有障碍物的左前和右前这两个方向。
请问最少需要多少步,大钉才能骑着马跳到终点。
输入
有多组测试样例。
每组第一行有两个数 n 和 m,代表矩阵的行数和列数,2 <= n <= m < 100。
接下来输入 n 行的字符串,其中 's' 代表起点,'e' 代表终点,'.'代表空地,'#'代表障碍物。
输出
对应每组输入,输出骑马跳到终点的最小步数,如果跳不到终点,输出 -1。
样例输入
3 3s.......e3 3s#....#.e
样例输出
4-1
#include<stdio.h>#include<string.h>#include<queue>using namespace std;char a[105][105];int vis[105][105],n,m,s1,s2,e1,e2,ok,bu;int l[9]={2,-2,1,-1,2,-2,1,-1},r[9]={1,-1,2,2,-1,1,-2,-2};//马的八个方向struct node{ int x,y,step;};void bfs(int x,int y){ queue<node> q; node now,next; now.x=x,now.y=y; now.step=0; q.push(now); while(!q.empty()) { now=q.front(); q.pop(); //printf("%d %d %d\n",now.x,now.y,now.step); if(now.x==e1&&now.y==e2) { bu=now.step; ok=1; return ; } for(int i=0;i<8;i++) { next.x=now.x+l[i]; next.y=now.y+r[i]; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&vis[next.x][next.y]==0&&a[next.x][next.y]!='#')//判断马是否能从该点落下 { if((i==0||i==4)&&a[now.x+1][now.y]!='#') { next.step=now.step+1; vis[next.x][next.y]=1; q.push(next); } if((i==6||i==7)&&a[now.x][now.y-1]!='#') { next.step=now.step+1; vis[next.x][next.y]=1; q.push(next); } if((i==1||i==5)&&a[now.x-1][now.y]!='#') { next.step=now.step+1; vis[next.x][next.y]=1; q.push(next); } if((i==2||i==3)&&a[now.x][now.y+1]!='#') { next.step=now.step+1; vis[next.x][next.y]=1; q.push(next); } } } } return ;}int main(){ while(~scanf("%d%d",&n,&m)) { memset(vis,0,sizeof(vis)); ok=-1; bu=0; s1=-1,s2=-1,e1=-1,e2=-1; int i,j; for(i=0;i<n;i++) { getchar(); for(j=0;j<m;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='s') { s1=i,s2=j; } if(a[i][j]=='e') { e1=i,e2=j; } } } if((s1==-1&&s2==-1)||(e1==-1&&e2==-1))//如果没有起点和终点就直接跳出 printf("-1\n"); else { vis[s1][s2]=1; bfs(s1,s2); if(ok==1) printf("%d\n",bu); if(ok==-1) printf("-1\n"); } }}
0 0
- 大钉骑马走江湖
- 大钉骑马走江湖
- 大钉骑马走江湖
- 大钉骑马走江湖【bfs】
- 计蒜客-大钉骑马走江湖
- 计蒜客 11064 大钉骑马走江湖
- 大钉骑马走江湖 (计蒜客)
- C++ - 计蒜客 - 大钉骑马走江湖(bfs)
- 大钉骑马走江湖 (bfs)
- 大钉骑马走江湖 北京林业大学校赛。
- 计蒜客————大钉骑马走江湖
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 B. 大钉骑马走江湖 (广搜)
- 北京林业大学 “计蒜客”杯程序设计竞赛 网络赛 B. 大钉骑马走江湖 BFS
- BFS — 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 —— 大钉骑马走江湖
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 常见问题——大钉骑马走江湖
- 第二届北京林业大学“计蒜客”杯程序设计竞赛 B题 大钉骑马走江湖
- 第二届北京林业大学“计蒜客”杯程序设计竞赛 Problem B - 大钉骑马走江湖
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛-B大钉骑马走江湖
- OC-BLOCK
- dom对列表的选择
- USACO 2.1-Sorting a Three-Valued Sequence
- [Java]适配器设计
- 背包问题——(贪心法)
- 大钉骑马走江湖
- 在Activity中开启一个线程执行网络操作出现的问题
- Cloudera Manager下安装kafka
- javascript 的 继承(四) 之 原型式继承
- 获取当前的系统状态
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
- <OJ_Sicily>Coins完全背包问题
- Python学习(二)基础语法
- java数组倒置