博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scau实验题 8600 骑士周游问题(有障碍物)
阅读量:5875 次
发布时间:2019-06-19

本文共 2035 字,大约阅读时间需要 6 分钟。

简单骑士周游问题,BFS,有障碍物,(可能存在无障碍物的情况),起点和终点不会相同,起点终点无障碍物

若能从起点出发到终点则输出步数,否者输入不能到达

#include 
#include
#include
#define N 70using namespace std;bool g[N][N];int b;int start,end;struct node{ int n,r,c,k;};queue
q;int BFS(){ int ans,i,k,R[10],C[10],FIND; struct node tmp; while(!q.empty()) q.pop(); tmp.n=start; tmp.r=(start%8)==0 ? start/8 : start/8+1; tmp.c=(start%8)==0 ? 8: start%8; tmp.k=0; q.push(tmp); FIND=0; while(!q.empty()) { tmp=q.front(); k=tmp.k; q.pop(); R[1]=tmp.r-2; C[1]=tmp.c-1; R[2]=tmp.r-2; C[2]=tmp.c+1; R[3]=tmp.r-1; C[3]=tmp.c+2; R[4]=tmp.r+1; C[4]=tmp.c+2; R[5]=tmp.r+2; C[5]=tmp.c+1; R[6]=tmp.r+2; C[6]=tmp.c-1; R[7]=tmp.r+1; C[7]=tmp.c-2; R[8]=tmp.r-1; C[8]=tmp.c-2; for(i=1; i<=8; i++) { if(R[i]>=1 && R[i]<=8 && C[i]>=1 && C[i]<=8 && !g[R[i]][C[i]]) { tmp.n=(R[i]-1)*8+C[i]; tmp.r=R[i]; tmp.c=C[i]; tmp.k=k+1; q.push(tmp); if(tmp.n==end) break; } } if(i<=8) {FIND=1; ans=tmp.k; break;} } return FIND==1 ? ans : -1; }int main(){ int i,j,r,c,T=0,ans; char s1[5],s2[5]; while(scanf("%d",&b)!=EOF && b!=-1) { T++; memset(g,0,sizeof(g)); for(i=1; i<=b; i++) { scanf("%s",s1); //读入全部的障碍物并在图上标记 c=s1[0]-'a'+1; r=s1[1]-'0'; g[r][c]=1; } scanf("%s",s1); scanf("%s",s2); c=s1[0]-'a'+1; r=s1[1]-'0'; start=(r-1)*8+c; c=s2[0]-'a'+1; r=s2[1]-'0'; end=(r-1)*8+c;/* for(i=1; i<=8; i++) { for(j=1; j<=8; j++) printf("%d ",g[i][j]); printf("\n"); } printf("start=%d end=%d\n",start,end);*/ ans=BFS(); if(ans==-1) printf("Board %d:not reachable\n",T); else printf("Board %d:%d moves\n",T,ans); } return 0;}

转载地址:http://pfzix.baihongyu.com/

你可能感兴趣的文章
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
关于链接文件的探讨
查看>>
android app启动过程(转)
查看>>
Linux—源码包安装
查看>>
JDK8中ArrayList的工作原理剖析
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
乌克兰基辅一世遗修道院起火 现场火光照亮夜空
查看>>