nyoj 58 最小步数问题 BFS
2016-07-28 18:21
357 查看
#include<stdio.h> struct note { int x; int y; int s; }; int main() { struct note que[82]; int a[9][9]={ 1,1,1,1,1,1,1,1,1, <span style="white-space:pre"> </span> 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1};//由于题目已经给了迷宫的地图 因此直接定义即可 若没有给 需要少许改动输入即可 int T; int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//上下左右的前进方向 int head,tail;//采用队列实现广搜的储存; int i,j,k,n,m,startx,starty,p,q,tx,ty,flag; scanf("%d",&T); while(T--) { int book[9][9]={0}; scanf("%d%d%d%d",&startx,&starty,&p,&q); head=0; tail=0; flag=0; que[tail].x=startx; que[tail].y=starty; que[tail].s=0; tail++; book[startx][starty]=1; while(head<tail) { for(k=0;k<=3;k++) { tx=que[head].x+next[k][0]; ty=que[head].y+next[k][1]; if(tx<0||tx>9||ty<0||ty>9) continue; if(a[tx][ty]==0&&book[tx][ty]==0) { book[tx][ty]=1;//bfs每次只入队一次 que[tail].x=tx; que[tail].y=ty; que[tail].s=que[head].s+1; tail++; } if(tx==p&&ty==q) { flag=1; break; } } if(flag==1) break; head++;//只有当前一个点扩展结束后 才能继续向后扩展 } if(startx==p&&starty==q) printf("0\n"); else printf("%d\n",que[tail-1].s);//tail指向队列队尾的下一个位置 所以需要-1; } return 0; }
如果要求给出路径 可以在结构体中多加一个专门用来记录路径的变量作为编号
相关文章推荐
- 板瓦工 后台界面中文解释
- IBatis一对多嵌套查询
- nginx的centos和rhel的yum配置安装
- LeetCode#371 Sum of Two Integers
- HDU5762 Teacher Bo 带处理的暴力
- 移动web开发之——viewport
- POJ 3175 Finding Bovine Roots (枚举)
- ART世界探险(10) - 异常处理
- 轻松把玩HttpClient之封装HttpClient工具类(四),单线程调用及多线程批量调用测试
- Sql语句执行的次序(mysql)
- pandas使用笔记
- Hdu 5775 Bubble Sort(Multi 4 L 给你一个1到n的排列,然后按照冒泡排序的移动方式,问每个i 能移动到的最左位置和最右位置的差是多少)
- 数据挖掘常用工具
- 20160727常规赛总结
- [置顶] Android程序崩溃异常处理之自动发送邮件
- 简单的json解析工具
- java语言基础入门——String、StringBuffer、StringBuilder的比较
- C++顺序列表数据结构(值得深究)小白专用,高手绕道
- 自定义垂直的SeekBar并用图片做滑块和背景
- 轻松把玩HttpClient之封装HttpClient工具类(三),插件式配置Header