瞬移--BFS+set去重
1.移动方式就是(x+y-1)%l,然后肯定得用set去重得到最简便的移动方式·
2.-BFS最短路效应,vis标记+记录路长
P12322 [蓝桥杯 2024 国 Java C] 瞬移 - 洛谷
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> pii;
int n,l;
int a[2050];
set<int> d;
int vis[2050];
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>l;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){d.insert((a[i]+a[j]-1)%l);}}queue<int> q;q.push(1);vis[1]=1;while(q.size()){int t=q.front();q.pop();if(t==l){cout<<vis[l]-1;return 0;}for(int i:d){int pos=(t+i)%l+1;if(!vis[pos]){vis[pos]=vis[t]+1;q.push(pos);}}}cout<<-1;return 0;
}