已解决
最优性减枝
来自网友在路上 150850提问 提问时间:2023-09-20 21:11:35阅读次数: 50
最佳答案 问答题库508位专家为你答疑解惑
我们在搜索时常常会进行减枝操作,通常我们的减枝分为两种,一种是我们判断是否越界的可达性减枝,一种是能够抵达最终的答案,但是耗费的代价太过于高昂,我们将其进行最优性减枝。
举个例子,我们要从乳山走到青岛,你如果乘坐汽车去,结果出了青岛,这是否就是远离我们得到目的地了,这个时候我们就将这条路线舍去,因为它超出我们的目的地了,这就是无法抵达目的地的可达性减枝。另一种情况是,我们到青岛一号路线是走500公里,二号路线是700公里,如果你选择二号路线当走到501公里时,你就会发现不合适,因为已经超出一号路线的花费了。所以这就是最优性减枝
来个题把,考虑一下最优性的减枝。
注意本题最优性减枝会在第一个点超时,我们设置ww标记点,一旦超过我们设定的次数就会结束程序。这题的最优其实是dfs
P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
public class Main { public static void main(String[] args) throws NumberFormatException, IOException {
Scanner sc=new Scanner(System.in);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] aStrings=br.readLine().split(" ");
bb=Integer.parseInt(aStrings[0]);
start=Integer.parseInt(aStrings[1]);
end=Integer.parseInt(aStrings[2]);
String[] bStrings=br.readLine().split(" ");
aa=new int[bb+1];
check=new int[bb+1];
int a;
for(a=1;a<=bb;a++) {aa[a]=Integer.parseInt(bStrings[a-1]);
}
dfs(start, 0);
check[start]=1;
if(answer==Integer.MAX_VALUE){System.out.println("-1");return;
}
System.out.println(answer);}
public static int answer=Integer.MAX_VALUE;//设为最大值
public static int[] aa;//记录电梯的上升下降几楼
public static int bb;//电梯的最大楼层
public static int[] check;//这个层是否被到达过
public static int start,end;
public static int www=0;//设计dfs跑几次
public static void dfs(int louceng,int a) {www++;if(www>=10000000) {return;//大于设定次数,结束dfs}if(louceng==end) {answer=Math.min(answer, a);//到达指定楼层记录}if(louceng<=0||louceng>bb) {//到达楼层不合理推退出return;}if(a>answer) {//当前答案大于已经搜到的的答案,推出return;}//System.out.println(a+" "+louceng);if(louceng+aa[louceng]>=1&&louceng+aa[louceng]<=bb&&check[louceng+aa[louceng]]!=1) {check[louceng+aa[louceng]]=1;//往上探索//System.out.println("AAA"+" "+bb);dfs(louceng+aa[louceng] ,a+1);check[louceng+aa[louceng]]=0;}if(louceng-aa[louceng]>=1&&louceng-aa[louceng]<=bb&&check[louceng-aa[louceng]]!=1) {check[louceng-aa[louceng]]=1;//往下探索//System.out.println("BB");dfs(louceng-aa[louceng], a+1);check[louceng-aa[louceng]]=0;}
}
}
查看全文
99%的人还看了
相似问题
- 【算法】最优乘车——bfs(stringsteam的实际应用,getline实际应用)
- 聚铭国产化日志合规版 → 中小企事业单位等保建设的最优解
- 【工具】OCR方法|不用下载额外的软件,提取扫描中英文PDF的目录文本的最优解!(一)
- 人工智能基础_机器学习011_梯度下降概念_梯度下降步骤_函数与导函数求解最优解---人工智能工作笔记0051
- 最优值函数
- 最优化基础知识总结(1)
- 目前最优的非蒸馏、可商用的开源大模型!MIT-IBM 提出鲑鱼模型!
- 深度学习_6_实战_点集最优直线解_代码解析
- 计算机算法分析与设计(14)---贪心算法(会场安排问题和最优服务次序问题)
- 爱创科技携手洽洽食品,探索渠道数字化最优解!
猜你感兴趣
版权申明
本文"最优性减枝":http://eshow365.cn/6-10225-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Mysql—表操作
- 下一篇: laravel框架 - 开发实战(目录结构,路由,控制器,模型,视图)