思路:
还是一道很标准的最短路题,只不过需要我们去逆向一下思维,因为所有点都是要到达大本营的,不妨从大本营出发,到所有点,只需要一次最短路就结束了。
这个思维也是非常非常常见了,而且天梯赛也太爱考最短路了吧。
作者用的bfs+dijk+堆优化
代码:
#include <iostream>
#include <queue>
#include <cstring>
#define N 110
using namespace std;
int m,n,k,mp[N][N],x,y,s,t;
int dist[N][N],vis[N][N];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
struct node{
int d,x,y;
bool operator < (const node &a) const{
return d>a.d;
}
};
void bfs(){
memset(dist,0x3f,sizeof dist);
dist[s][t]=0;
priority_queue<node> q;
q.push({0,s,t});
while(q.size()){
node tmp=q.top();
q.pop();
int x=tmp.x,y=tmp.y;
if(vis[x][y]) continue;//类似dijk,找