最短路
描述 在一个n行m列的矩阵中,’P’代表平缓的场地,’H’代表小山。人的起点是在某个P的空格中,在这个矩阵中移动的规则如下: 每秒钟人可以向上下左右四个方向中任何一个方向移动一格,但需要注意的是不能进入小山所在的格子。 现在在P中随机选择起点和终点(起点和终点是可以重合的,如果重合则耗时为0),请你计算从起点移动到终点的最短耗时的平均值。 给你的矩阵有一个特点,每一行每一列至多有1个H格,并且H格不在对角线方向相邻。即给你数据中不会存在以下矩阵格式的矩阵: PH HP 输入 输入数据格式: 第一行两个整数n, m。 接下来n行,每行m个字符’P’或’H’。 输出 输出平均耗时值,请保留4位小数,需要四舍五入。 输入样例 2 2 PH PP 输出样例 0.8889 这道题看似十分困难,但由于有这一句话“给你的矩阵有一个特点,每一行每一列至多有1个H格,并且H格不在对角线方向相邻”,就不那么困难了 1.如果起点和终点不在同一条直线或同一条竖线上时,求曼哈顿距离(x1,y1)(x2,y2)=|x1-x2|+|y1-y2| 2.距离则是(第i行空地个数)-(第j行空地个数) 3.如果在同一行或同一列,则每遇到一个x就将ans+2 最后放上代码 #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib>