算法之暴力破解法(穷举法)

矫情吗;* 2022-02-27 14:48 551阅读 0赞

一,什么是暴力破解法?
暴力破解法,就是把所有条件,相关情况统统考虑进去,让计算机进行检索,指导得出与之所有条件符合的结果
(但是,暴力破解法对计算机资源耗费严重,如果条件太复杂,运算速度缓慢,为了解决这一问题,我们可以事先把与之不相关的条件进行限制,减少计算机的运算量)
在这里插入图片描述
在这里插入图片描述
把所有情况都给列出来了,蜜蜂每次到的点都有五种可能性,先确定了第一次跑的一种可能性,是第一个点,那么第二个点就不能出现第一个点,但是其他点可以,在确定第三个点时,要排除前两个走过的点,依次类推,到最后一个只能是剩下来的那个点,并计算其中每段距离,在累和起来就是这一条路径的总距离,再把这个总距离作为一个元素存到一个动态数组;最后这样的方式来五回,把所有可能列出来,计算所有路径的长度,都存放到动态数组中,最后再来一步,看看数组中谁最小就好

  1. package com.test3;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Scanner;
  5. public class Main1 {
  6. public static void main(String[] args) {
  7. /*
  8. * 集合ArrayList,存储int类型数
  9. * 集合本身不接受基本类型,自动装箱存储
  10. */
  11. Scanner sc = new Scanner(System.in);
  12. ArrayList<int[]> list = new ArrayList<int[]>();
  13. //将所有坐标存入数组中
  14. for (int i = 0; i < 5; i++) {
  15. int[] arraytemp = new int[2];
  16. for (int j = 0; j < 2; j++) {
  17. arraytemp[j] = sc.nextInt();
  18. }
  19. //将每对坐标存入ArrayList
  20. list.add(arraytemp);
  21. }
  22. //每段距离的存储变量
  23. double ln1 = 0;
  24. double ln2 = 0;
  25. double ln3 = 0;
  26. double ln4 = 0;
  27. double ln5 = 0;
  28. double ln6 = 0;
  29. double sum = 0;
  30. //存储每一条路径的总距离
  31. ArrayList<Double> listSum = new ArrayList<Double>();
  32. //暴力检索
  33. for (int i = 0; i < 5; i++) {
  34. //求出第一段距离
  35. ln1 = Math.sqrt(Math.pow(list.get(i)[0], 2) + Math.pow(list.get(i)[1], 2));
  36. //求第二段距离
  37. for (int i1 = 0; i1 < 5; i1++) {
  38. //排除与之重复的坐标
  39. if (list.get(i1) == list.get(i)) {
  40. continue;
  41. }else{
  42. ln2 = Math.sqrt(Math.pow(list.get(i1)[0]-list.get(i)[0], 2) + Math.pow(list.get(i1)[1]-list.get(i)[1], 2));
  43. }
  44. //求第三段距离
  45. for (int i2 = 0; i2 < 5; i2++) {
  46. //排除与之重复的坐标
  47. if(list.get(i2) == list.get(i1) || list.get(i2) == list.get(i)){
  48. continue;
  49. }else{
  50. ln3 = Math.sqrt(Math.pow(list.get(i2)[0]-list.get(i1)[0], 2) + Math.pow(list.get(i2)[1]-list.get(i1)[1], 2));
  51. }
  52. //第四段距离
  53. for (int i3 = 0; i3 < 5; i3++) {
  54. //排除与之重复的坐标
  55. if(list.get(i3) == list.get(i2)||list.get(i3) == list.get(i1) || list.get(i3) == list.get(i)){
  56. continue;
  57. }else{
  58. ln4 = Math.sqrt(Math.pow(list.get(i3)[0]-list.get(i2)[0], 2) + Math.pow(list.get(i3)[1]-list.get(i2)[1], 2));
  59. }
  60. //第五段距离
  61. for (int i4 = 0; i4 < 5; i4++) {
  62. //排除与之重复的坐标
  63. if(list.get(i4) == list.get(i3)||list.get(i4) == list.get(i2)||list.get(i4) == list.get(i1) || list.get(i4) == list.get(i)){
  64. continue;
  65. }else{
  66. ln5 = Math.sqrt(Math.pow(list.get(i4)[0]-list.get(i3)[0], 2) + Math.pow(list.get(i4)[1]-list.get(i3)[1], 2));
  67. }
  68. //第六段距离
  69. ln6 = Math.sqrt(Math.pow(list.get(i4)[0], 2) + Math.pow(list.get(i4)[1], 2));
  70. sum = ln1 + ln2 + ln3 + ln4 + ln5 + ln6;
  71. listSum.add(sum);
  72. }
  73. }
  74. }
  75. }
  76. }
  77. Collections.sort(listSum);
  78. double num;
  79. num = listSum.get(0);
  80. int result = (int) num;
  81. System.out.println(result);
  82. }
  83. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,551人围观)

还没有评论,来说两句吧...

相关阅读

    相关 穷举

    ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub

    相关 暴力破解算法

    暴力破解算法 可用于如下场景: 1、密码猜测 2、对于罗拉模块的数据请求,当发现模块么有回应数据时,往往考虑是否模块所处位置导致信号无法到达,此时可借助其他模块作为中继

    相关 算法暴力破解穷举)

    一,什么是暴力破解法? 暴力破解法,就是把所有条件,相关情况统统考虑进去,让计算机进行检索,指导得出与之所有条件符合的结果 (但是,暴力破解法对计算机资源耗费严重,如果