本题是多个朋友 "r" 去牢房解救天使 "a" 的故事,"#"是墙,"."是路,路的话走一格需要一步的时间,"x"是守卫,需要先杀死守卫再走过去,耗费两步的时间,问哪一个朋友能在最少步数把天使救出来。
本来很天真,用DFS写了一个,果断TLE了。
后来用BFS写,并且写的时候有一个取巧的地方,就是让天使去寻找朋友,而不是让朋友寻找天使,大概思路是每次把最少步数的节点赋给 节点 t ,然后判断该点是否为 "r",若是,直接break,若否,则把最少步数节点pop出优先队列,然后以 t 为基准向四个方向扩展,直到找出 "r"为止。
先贴一下超时代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
int m, n, min;
int x