南阳 58题 最小步数
来源:互联网 发布:无线网址域名注册 编辑:程序博客网 时间:2024/05/29 08:42
思路:用广搜搜索就是最短路径了;
最少步数
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
这有一个迷宫,有0~8行和0~8列:
1,1,1,1,1,1,1,1,1
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,10表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
- 输入
- 第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。 - 输出
- 输出最少走几步。
- 样例输入
23 1 5 73 1 6 7
- 样例输出
1211
#include <stdio.h>#include <stdlib.h>#include <string.h>#define QUEUELEN 1000//数据结构的定义typedef struct {int x; int y;int pre;}DATA; typedef struct {DATA data[QUEUELEN];int head;int tail;}SQType;//队列的初始化SQType *SQTypeInit(){SQType *q;if(q=(SQType *)malloc(sizeof(SQType))){q->head=0;q->tail=0; return q;}else{return NULL;}}//判断空队列int SQTypeIsEmpty(SQType *q){int temp;temp=q->head==q->tail;return temp;}//判断满队列int SQTypeisFull(SQType *q){int temp;temp=q->tail==QUEUELEN;return temp;}//清空队列void SQTypeClear(SQType *q){q->head=0;q->tail=0;}//释放空间void SQTypeFree(SQType *q){if (q!=NULL){free(q);}}//入队int InSQType(SQType *q,DATA data){if (q->tail==QUEUELEN){printf("队列满鸟。。。");return 0;}else{q->data[q->tail++]=data;return 1;}}//出队列int OutSQType(SQType *q,DATA &a){if(q->head==q->tail){ printf("亲,队列是空的。。。"); return 0;}else{ a= q->data[q->head++]; return 1;}}//读取节点的数据DATA *PeekSQType(SQType *q){ if(SQTypeIsEmpty(q)) { printf("\n这个队列是空的啊。。。\n"); return NULL; } else { return &(q->data[q->head]); }}//计算队列的长度int SQTypeLen(SQType *q){ int temp; temp=q->tail-q->head; return temp;}DATA h[100];int bfs(int x,int y,int zx,int zy){ if(x==zx&&y==zy) { printf("0\n");return 1; } int mg[9][9]= //定义迷宫,0表示能走的块,1表示不能走,在外围加上一圈不能走的块 { {1,1,1,1,1,1,1,1,1}, {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 dir[4][2]={1,0,-1,0,0,1,0,-1}; int flag[9][9]={0}; SQType *migong=SQTypeInit(); DATA a={x,y,0}; int front=-1; flag[1][1]=1; InSQType(migong,a); while(!SQTypeIsEmpty(migong)) { OutSQType(migong,a); for(int i=0;i<4;i++) { int nx=a.x+dir[i][0]; int ny=a.y+dir[i][1]; if(nx==zx&&ny==zy) { printf("%d\n",a.pre+1);return 1; } if(mg[nx][ny]==0&&!flag[nx][ny]&&nx>=0&&nx<=8&&ny>=0&&ny<=8) { DATA n; n.pre=a.pre+1; n.x=nx; n.y=ny; flag[nx][ny]=1; InSQType(migong,n); } } } }int main(){ int n,x,y,zx,zy; scanf("%d",&n); while(n--) { scanf("%d%d%d%d",&x,&y,&zx,&zy); bfs(x,y,zx,zy); } }
0 0
- 南阳 58题 最小步数
- 南阳58 最少步数
- 58-最小步数
- 南阳理工58最少步数
- 南阳oj-58 最少步数
- nyoj 58 最小步数
- NYOJ 58 最小步数
- nyoj 58 最小步数
- NYOJ - 58 最小步数
- NYOJ 58 最小步数
- NYOJ~58~最小步数
- 【南阳acm】最少步数
- 南阳oj58最少步数
- 南阳oj-最少步数
- 南阳理工OJ_题目58 最少步数
- 最少步数 南阳oj 58【DFS||BFS】
- 最小步数 n 58 bfs
- NYOJ-58 最小步数 AC
- redis整合spring mybatis --缓存方案
- HTTP响应头和请求头信息对照表
- oracle12c安装时报错:[INS-30131] 执行安装程序验证所需的初始设置失败
- 设置Areas下的页面为项目默认起始页
- 简单的二维码的扫描
- 南阳 58题 最小步数
- ibox (bootstrap)
- c++ 数据类型
- elasticsearch5.3.0+kibana5.3.0+logstash5.3.0搜索windows环境搭建
- 【洛谷P1006】 传纸条
- java synchronized关键字的用法以及锁的等级:对象锁、类锁
- python中集合类型创建、更新、删除、修改以及操作符使用实例代码
- Kingbase金仓数据库工程维护简明手册
- Python 爬取网页内容,转成PDF