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

版权声明:本文为博主原创文章,转载请附上博文链接 https://blog.csdn.net/weixin_40807247/article/details/88857765

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

package com.test3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main1 {
	public static void main(String[] args) {
		/*
		 *  集合ArrayList,存储int类型数
		 *  集合本身不接受基本类型,自动装箱存储
		 */
		Scanner sc = new Scanner(System.in);
		ArrayList<int[]> list = new ArrayList<int[]>();
		//将所有坐标存入数组中
		for (int i = 0; i < 5; i++) {
			int[] arraytemp = new int[2];
			for (int j = 0; j < 2; j++) {
				arraytemp[j] = sc.nextInt();
			}
			//将每对坐标存入ArrayList
			list.add(arraytemp);
		}
		//每段距离的存储变量
		double ln1 = 0;
        double ln2 = 0;
        double ln3 = 0;
        double ln4 = 0;
        double ln5 = 0;
        double ln6 = 0;
        double sum = 0;
        //存储每一条路径的总距离
        ArrayList<Double> listSum = new ArrayList<Double>();
        //暴力检索
        for (int i = 0; i < 5; i++) {
        	//求出第一段距离
			ln1 = Math.sqrt(Math.pow(list.get(i)[0], 2) + Math.pow(list.get(i)[1], 2));
			//求第二段距离
			for (int i1 = 0; i1 < 5; i1++) {
				//排除与之重复的坐标
				if (list.get(i1) == list.get(i)) {
					continue;
				}else{
					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));
				}
				//求第三段距离
				for (int i2 = 0; i2 < 5; i2++) {
					//排除与之重复的坐标
					if(list.get(i2) == list.get(i1) || list.get(i2) == list.get(i)){
						continue;
					}else{
						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));
					}
					//第四段距离
					for (int i3 = 0; i3 < 5; i3++) {
						//排除与之重复的坐标
						if(list.get(i3) == list.get(i2)||list.get(i3) == list.get(i1) || list.get(i3) == list.get(i)){
							continue;
						}else{
							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));
						}
						//第五段距离
						for (int i4 = 0; i4 < 5; i4++) {
							//排除与之重复的坐标
							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)){
								continue;
							}else{
								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));
							}
							//第六段距离
							ln6 = Math.sqrt(Math.pow(list.get(i4)[0], 2) + Math.pow(list.get(i4)[1], 2));
							sum = ln1 + ln2 + ln3 + ln4 + ln5 + ln6;
							listSum.add(sum);
						}
					}
				}
			}
        }
        Collections.sort(listSum);
        double num;
        num = listSum.get(0);
        int result = (int) num;
        System.out.println(result);
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40807247/article/details/88857765