栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

奇怪的电梯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

奇怪的电梯

bfs

#include"bits/stdc++.h"

using namespace std;
int n,a,b;
int s[205],v[205];
struct node{
	int x,y,step;
};
int bfs(int x){
	queueq;
	q.push({x,s[x],0});
	v[x]=1;
	int f=0;
	while(!q.empty())
	{
		int u = q.front().x;
		int u1 = q.front().y;
		int u2 = q.front().step;
		q.pop();
		v[u]=1;
		if(u == b){
			f=1;
		    return u2;
		}
        if(u + u1 <= n && !v[u + u1]){
            v[u + u1] = 1;
            q.push({u+u1,s[u+u1],u2+=1});
        }
        if(u - u1 >=1 && !v[u - u1]){
            v[u - u1] = 1;
            q.push({u-u1,s[u-u1],u2+=1});
        }
	}
	if(!f)	return -1;
}
int main()
{
	cin >> n >> a >> b;
	for(int i=1 ; i<=n ; i++) cin >> s[i];
	cout << bfs(a) << endl;
	return 0;
}

dfs(这是看一位大佬,看懂了写出来)

#include"bits/stdc++.h"

using namespace std;
int s[205],v[205],f=999999;
int n,a,b;
void dfs(int x, int cnt){
	if(x == b){
		f = min(f,cnt);
	}else if(cnt <= f){		// 剪枝
		v[x] = 1;
		if(x + s[x] <=n && !v[x+s[x]]) dfs(x+s[x],cnt+1);//上升
		if(x - s[x] >=1 && !v[x-s[x]]) dfs(x-s[x],cnt+1);//下降
		v[x] = 0;	//回溯  核心 
	}
}
int main()
{
	cin >> n >> a >> b;
	for(int i=1;i<=n;i++) cin >> s[i];
	dfs(a,0);
	if(f == 999999) cout << -1 << endl;	
	else cout << f << endl;
	return 0;
 } 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号