题解
2024-12-07 19:58:03
发布于:广东
29阅读
0回复
0点赞
由于n较小,可以使用广搜,把走过的标记一遍,如果没有路能走了,输-1。
代码如下:
#include<bits/stdc++.h>
using namespace std;
map<int,bool> a;
int vis[500005];
struct node{
int p,step;
};
int main(){
int n,m,k;
cin >> n >> m >> k;
for(int i = 0;i < m;i ++){
int x;
cin >> x;
a[x] = 1;
}
queue<node> q;
q.push({1,0});
while(!q.empty()){
int ip = q.front().p,istep = q.front().step;
q.pop();
if(ip >= n){
cout << istep;
return 0;
}
if(ip + k >= n){
cout << istep + 1;
return 0;
}
for(int i = k;i >= 1;i --){
int tmp = ip + i;
if(a[tmp] == 1 and vis[tmp] == 0){
vis[tmp] = 1;
q.push({tmp,istep + 1});
}
}
}
cout << -1;
return 0;
}
这里空空如也
有帮助,赞一个