Gold: Lasers and Mirrors
Gold: Lasers and Mirrors
USACO.guide上的 normal
星标:P3036 USACO16DEC] Lasers and Mirrors G
当时做的时候忘记blog了,这里放个代码
//
// Created by Chixiyu on 1/1/2024.
//
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
n+=2;
vector<pair<int,int>> mirrors(n + 2);
unordered_map<int,vector<int>> adj[2];
vector<int> distance(n,INT_MAX);
for(int i=0;i<n;i++){
int a,b;
cin>>a>>b;
mirrors[i]={a, b};
adj[0][a].push_back(i);
adj[1][b].push_back(i);
}
queue<pair<int,int>> q;
q.emplace(0, false);
q.emplace(0,true);
distance[0]=0;// laser's distance is 0
//bfs
while(!q.empty()){
int node=q.front().first;
bool direction=q.front().second;// 0: x, 1: y
int point=direction?mirrors[node].first:mirrors[node].second;
q.pop();
for(auto i:adj[!direction][point]){
if(distance[i]==INT_MAX){// unvisited
q.emplace(i,!direction);
distance[i]= distance[node]+1;
}
}
}
cout<<(distance[1]==INT_MAX?-1:(distance[1]-1))<<endl;
return 0;
}
评论
其他文章