南阳理工OJ_题目58 最少步数
来源:互联网 发布:永乐票务抢票软件 编辑:程序博客网 时间:2024/05/29 16:04
#include <iostream>#include <queue>#include <cstring>using namespace std;int bfs();struct data{ int x; int y; int d; int vis;};char ch[11][11] = { "111111111", "100100101", "100110001", "101011011", "100001001", "110101001", "110101001", "110100001", "111111111", };data a[11][11];int x1;int y1;int x2;int y2;int main(){ int T; cin >> T; while(T--) { cin >> x1 >> y1 >> x2 >> y2; cout << bfs() << '\n'; }}int bfs(){ data t; queue<data> q; memset(a, 0, sizeof(a)); a[x1][y1].vis = 1; a[x1][y1].x = x1; a[x1][y1].y = y1; a[x1][y1].d = 0; q.push(a[x1][y1]); while(!q.empty()) { t = q.front(); q.pop(); if(t.x == x2 && t.y == y2) return t.d; if(ch[t.x+1][t.y] == '0' && a[t.x+1][t.y].vis == 0) { a[t.x+1][t.y].vis = 1; a[t.x+1][t.y].d = t.d+1; a[t.x+1][t.y].x = t.x+1; a[t.x+1][t.y].y = t.y; q.push(a[t.x+1][t.y]); } if(ch[t.x-1][t.y] == '0' && a[t.x-1][t.y].vis == 0) { a[t.x-1][t.y].vis = 1; a[t.x-1][t.y].d = t.d+1; a[t.x-1][t.y].x = t.x-1; a[t.x-1][t.y].y = t.y; q.push(a[t.x-1][t.y]); } if(ch[t.x][t.y+1] == '0' && a[t.x][t.y+1].vis == 0) { a[t.x][t.y+1].vis = 1; a[t.x][t.y+1].d = t.d+1; a[t.x][t.y+1].x = t.x; a[t.x][t.y+1].y = t.y+1; q.push(a[t.x][t.y+1]); } if(ch[t.x][t.y-1] == '0' && a[t.x][t.y-1].vis == 0) { a[t.x][t.y-1].vis = 1; a[t.x][t.y-1].d = t.d+1; a[t.x][t.y-1].x = t.x; a[t.x][t.y-1].y = t.y-1; q.push(a[t.x][t.y-1]); } }}
0 0
- 南阳理工OJ_题目58 最少步数
- 南阳理工58最少步数
- 南阳理工OJ_题目448 寻找最大数
- 南阳理工OJ_水仙花数
- 南阳58 最少步数
- 南阳理工OJ_题目709 异形卵
- 南阳理工OJ_题目714 Card Trick
- 南阳理工OJ_题目16 矩形嵌套
- 南阳理工OJ_题目168 房间安排
- 南阳理工OJ_题目303 序号互换
- 南阳理工OJ_题目305 表达式求值
- 南阳理工OJ_题目308 Substring
- 南阳理工OJ_题目915 +-字符串
- 南阳理工OJ_题目18 The Triangle
- 南阳理工OJ_题目10 skiing
- 南阳理工OJ_题目995 硬币找零
- 南阳理工OJ_题目37 回文字符串
- 南阳理工OJ_题目311 完全背包
- ACM数学知识体系
- 浅尝boost之timer
- python(2) 万物皆对象
- 第71天
- kindle dxg汉化和安装kindlepdfviewer
- 南阳理工OJ_题目58 最少步数
- 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)
- 将宏定义写得更像函数
- 模块管理常规功能自定义系统的设计与实现(40--终级阶段 综合查询[7])
- (C和指针)1.1简介
- 用继承来描述自己的信息
- C++读取txt文本中的矩阵数据
- 【动态规划】
- ,将光棍节