很早就听说过A*算法,据说在寻路径时,是一种比较高效的算法。但是一直没有搞清楚原理。 这段时间刚好有个营救公主的例子: 题描述 : 公主被魔王抓走了 , 王子需要拯救出美丽的公主 。 他进
顺晟科技
2021-08-28 09:42:22
168
思路: 首先将物品根据性价比排好序在一个集合里,性价比=价格/重量.
然后根据性价比从大到小依次依次放入背包,如果没办法放入这个物品的全部,就放入一部分,如果可以放入全量物品,就放入全量物品。
Main.java的代码
导入Java。乌提尔。ArrayList
导入Java。乌提尔。收藏品;
导入Java。乌提尔。比较器;
/**
*由罗虎于2016年2月16日创建。
*/
公共类主要的
{
//背包总质量
私静双M=20
//物品数量
私有静态(同Internationalorganizations)国际组织数=3;
公共静态void main(字符串[]参数)
{
MyObject myObject1=新的MyObject(18,25);
MyObject myObject2=新的MyObject(15,24);
MyObject myObject3=新的MyObject(10,15);
arraylismyobject myObjects=new arraylismyobject(数字);
我的目标1。价格比=(myobject 1。价格* 1.0)/(myobject 1。重量);
我的目标2。价格比=(myobject 2。价格* 1.0)/(myobject 2。重量);
我的目标3。价格比=(myobject 3。价格* 1.0)/(myobject 3。重量);
我的物品。添加(我的对象1);
我的物品。添加(我的对象2);
我的目标。添加(my object 3);
//根据物品的性价比将集合中的物品做一个排序,按照性价比从大到小排列
Collections.sort(myObjects,new ComparatorMyObject()
{
@覆盖
公共(同Internationalorganizations)国际组织比较(MyObject o1,MyObject o2)
{
if(o1.priceRatio o2.priceRatio)
{
返回-1;
}
其他
返回1;
}
} );
MyObject温度=空
for(int I=0;我数m ^ 0;(一)
{
temp=myobjects。得到(我);
if(M=温度重量)
{
M=M -温度重量;
温度x=1.0
}
其他
{
温度x=(M * 1.0 ) /温度重量;
M=M -(温度重量*温度x);
}
}
用于(MyObject myObject : myObjects)
{
System.out.println('物品价格是:' myObject.price '的物品,装入比例是: ' MyObject。x);
}
}
}
MyObject.java文件的代码
/**
*由罗虎于2016年2月16日创建。
*/
/**
* 物品对象
*/
公共类对象
{
公共国际权重=0;
public int price=0;
//装入的比例
公共双x=0;
//性价比
公共双价比率=0;
公共MyObject(整数权重,整数价格)
{
this.weight=重量;
这个,价格=价格;
}
}
28
2021-08
28
2021-08
28
2021-08
28
2021-08
28
2021-08
28
2021-08