NYOJ 58 最少步数
最少步数
- 描述
-
这有一个迷宫,有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)分别表示起点的行、列,终点的行、列。 - 输出
- 输出最少走几步。
- 样例输入
-
2
3 1 5 7
3 1 6 7 - 样例输出
-
12
11
原题来自:http://acm.nyist.net/JudgeOnline/problem.php?pid=58
代码一:dfs
// dfs
#include <stdio.h>
int ans,sx,sy,ex,ey;
bool vis[][],map[][]={
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,
}; void dfs(int i,int j,int cnt)
{
if(i<||i>||j<||j>||vis[i][j]||map[i][j]||cnt>=ans)return;
if(i==ex&&j==ey)
{
ans=cnt;
return;
} vis[i][j]=; // 这个已经遍历了x` dfs(i,j-,cnt+);
dfs(i-,j,cnt+);
dfs(i,j+,cnt+);
dfs(i+,j,cnt+); vis[i][j]=;
} int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
ans=;
dfs(sx,sy,);
printf("%d\n",ans);
}
return ;
}
代码二:bfs
/*BFS*/
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; #define N 9 typedef struct
{
int x,y,cnt;
}Node; int dir[][] = {{-,},{,},{,},{,-}};
int sx,sy,ex,ey;
int mp[N][N] =
{
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,},
{,,,,,,,,}
};
int vis[N][N];
int bfs()
{
queue<Node> Q;
Node tmp,p;
p.x = sx; p.y = sy;
p.cnt = ;
memset(vis,,sizeof(vis));
vis[sx][sy] = ;
Q.push(p);
while(!Q.empty())
{
p = Q.front();
Q.pop();
if (p.x == ex && p.y == ey)
return p.cnt; for(int di=;di<;di++)
{
tmp.x = p.x + dir[di][]; tmp.y = p.y + dir[di][];
tmp.cnt = p.cnt + ;
if(tmp.x>= && tmp.x<= && tmp.y>= && tmp.y<= &&!vis[tmp.x][tmp.y] && !mp[tmp.x][tmp.y] )
{
Q.push(tmp);
vis[tmp.x][tmp.y] = ;
}
}
}
return -;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
printf("%d\n",bfs());
}
return ;
}
马上21点。要下课了,晚点我用求最短路径的算法来写写看,不求ac,只求学习,用不同的方法来实现它。
求最短路径常用算法:
戴克斯特拉算法(Dijkstra algorithm):该算法解决的是有向图中单个源点到其他顶点的最短路径问题。
弗洛伊德算法(Floyd algorithm):该算法解决的是有向带权图中两顶点之间最短路径的问题。
A*搜索算法:A*搜索算法,俗称A星算法。这是一种在图平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
SPFA算法:中国人发明的算法,该算法是求单源最短路径的一种算法,在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作。
NYOJ 58 最少步数的更多相关文章
- nyoj 1022 最少步数【优先队列+广搜】
最少步数 时间限制: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 ...
- NYOJ 53 最少步数
题 目 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=58 思路借鉴 DFS-Deep First Search-深度优先 ...
- ny 58 最少步数 (BFS)
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=58 就是一道简单的BFS 练习练习搜索,一次AC #include <iostream& ...
- 南阳理工 58 最少步数 (DFS)
描述 这有一个迷宫,有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, ...
- ACM 最少步数
最少步数 时间限制: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 ...
- [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)
Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...
- nyist 58 最小步数 BFS
最少步数 时间限制: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 ...
- 最少步数(bfs)
最少步数 时间限制: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 ...
- 最少步数(dfs + bfs +bfs优化)
最少步数 时间限制: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 ...
随机推荐
- HTTP 头部详细解释
HTTP 头部解释 ================================================ Accept 告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,ty ...
- JavaScript - javascript 中的 "||" 与 "&&" 的理解与灵活运
你肯定见到过这样的代码:a = a||"xxx". 它其实就等价于下面三种形式的代码: a = a || "xxx"; 与: if (!a) { a = &qu ...
- CentOS 编译安装 mysql
1.前期准备 1.1 环境说明: 操作系统: CentOS release 6.4 (Final) [查看命令 cat /etc/redhat-release ] mysql : mysql-5.6. ...
- 十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)
本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时 ...
- @media 手机与IPAD与PC
@media screen and (min-width: 769px) { bindCard{height:28.5em} } @media screen and (min-device-width ...
- tar的-t参数使用
-t, --list list the contents of an archive 例如: pengdl@localhost:~/test$ tar -czvf shell.ta ...
- debian之samba服务器搭建
安装过程非常简单: apt-get install samba sudo vim /etc/sama/smb.conf [pengdl] comment = pengdl's samba path = ...
- python反射机制深入分析
对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...
- const与readonly深度分析(.NET)
前言 很多.NET的初学者对const和readonly的使用很模糊,本文就const和readonly做一下深度分析,包括: 1. const数据类型的优势 2. const数据类型的劣势 3. r ...
- Spring基础——小的知识点
一.整合多个配置文件 在 Spring Config 文件中,可以使用 <import> 标签将别的配置文件引入到一个文件中,进行配置文件的集成.该标签和 <bean> 标签同 ...