当前位置:首页 » 矿机知识 » grin算法矿机

grin算法矿机

发布时间: 2021-06-13 07:11:33

① A*算法java实现

首先,你要知道走迷宫的思路:就是遇到岔路都往一个方向,比如往右,遇到死路就回头,回头遇到岔路继续往右。
线法线在同一平面上,反射光线与入射光线分

② 什么才叫真正的虚拟数字货币

1、真正的虚拟货币限量不增发!
2、真正的虚拟货币必须在国际交易平台交易,可变现
3、真正的虚拟货币有开源代码!有自己独立的钱包!每一个币都有自己的代码,有自己的价值。
4、真正的虚拟货币可以通过矿机挖矿!有自己特定算法。
5、真正的虚拟货币是可以和比特币、美元兑换的!
6、真正的虚拟货币是可以相互兑现的!

③ 用java怎么实现A*算法

代码实现(Java)
1.输入
(1)代表地图二值二维数组(0表示可通路,1表示路障)
int[][]maps={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,0,0,0,0,0,0,1,1,1,0,0},
{0,0,0,1,0,0,0,0,0,1,1,0,0,0,0},
{0,0,0,1,0,0,0,0,1,1,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,1,0,0,0,0,1,0,0,0,0,0,0}
};123456789123456789
(2)按照二维数组的特点,坐标原点在左上角,所以y是高,x是宽,y向下递增,x向右递增,我们将x和y封装成一个类,好传参,重写equals方法比较坐标(x,y)是不是同一个。
publicclassCoord
{
publicintx;
publicinty;

publicCoord(intx,inty)
{
this.x=x;
this.y=y;
}

@Override
publicbooleanequals(Objectobj)
{
if(obj==null)returnfalse;
if(objinstanceofCoord)
{
Coordc=(Coord)obj;
returnx==c.x&&y==c.y;
}
returnfalse;
}
}2223
(3)封装路径结点类,字段包括:坐标、G值、F值、父结点,实现Comparable接口,方便优先队列排序。
<Node>
{

publicCoordcoord;//坐标
publicNodeparent;//父结点
publicintG;//G:是个准确的值,是起点到当前结点的代价
publicintH;//H:是个估值,当前结点到目的结点的估计代价

publicNode(intx,inty)
{
this.coord=newCoord(x,y);
}

publicNode(Coordcoord,Nodeparent,intg,inth)
{
this.coord=coord;
this.parent=parent;
G=g;
H=h;
}

@Override
publicintcompareTo(Nodeo)
{
if(o==null)return-1;
if(G+H>o.G+o.H)
return1;
elseif(G+H<o.G+o.H)return-1;
return0;
}
}
(4)最后一个数据结构是A星算法输入的所有数据,封装在一起,传参方便。:grin:
publicclassMapInfo
{
publicint[][]maps;//二维数组的地图
publicintwidth;//地图的宽
publicinthight;//地图的高
publicNodestart;//起始结点
publicNodeend;//最终结点

publicMapInfo(int[][]maps,intwidth,inthight,Nodestart,Nodeend)
{
this.maps=maps;
this.width=width;
this.hight=hight;
this.start=start;
this.end=end;
}
}
2.处理
(1)在算法里需要定义几个常量来确定:二维数组中哪个值表示障碍物、二维数组中绘制路径的代表值、计算G值需要的横纵移动代价和斜移动代价。
publicfinalstaticintBAR=1;//障碍值
publicfinalstaticintPATH=2;//路径
publicfinalstaticintDIRECT_VALUE=10;//横竖移动代价
publicfinalstaticintOBLIQUE_VALUE=14;//斜移动代价12341234
(2)定义两个辅助表:Open表和Close表。Open表的使用是需要取最小值,在这里我们使用Java工具包中的优先队列PriorityQueue,Close只是用来保存结点,没其他特殊用途,就用ArrayList。
Queue<Node>openList=newPriorityQueue<Node>();//优先队列(升序)
List<Node>closeList=newArrayList<Node>();1212
(3)定义几个布尔判断方法:最终结点的判断、结点能否加入open表的判断、结点是否在Close表中的判断。
/**
*判断结点是否是最终结点
*/
privatebooleanisEndNode(Coordend,Coordcoord)
{
returncoord!=null&&end.equals(coord);
}

/**
*判断结点能否放入Open列表
*/
(MapInfomapInfo,intx,inty)
{
//是否在地图中
if(x<0||x>=mapInfo.width||y<0||y>=mapInfo.hight)returnfalse;
//判断是否是不可通过的结点
if(mapInfo.maps[y][x]==BAR)returnfalse;
//判断结点是否存在close表
if(isCoordInClose(x,y))returnfalse;

returntrue;
}

/**
*判断坐标是否在close表中
*/
privatebooleanisCoordInClose(Coordcoord)
{
returncoord!=null&&isCoordInClose(coord.x,coord.y);
}

/**
*判断坐标是否在close表中
*/
privatebooleanisCoordInClose(intx,inty)
{
if(closeList.isEmpty())returnfalse;
for(Nodenode:closeList)
{
if(node.coord.x==x&&node.coord.y==y)
{
returntrue;
}
}
returnfalse;
}353637383940414243444546
(4)计算H值,“曼哈顿”法,坐标分别取差值相加
privateintcalcH(Coordend,Coordcoord)
{
returnMath.abs(end.x-coord.x)+Math.abs(end.y-coord.y);
}12341234
(5)从Open列表中查找结点
privateNodefindNodeInOpen(Coordcoord)
{
if(coord==null||openList.isEmpty())returnnull;
for(Nodenode:openList)
{
if(node.coord.equals(coord))
{
returnnode;
}
}
returnnull;
}
(6)添加邻结点到Open表
/**
*添加所有邻结点到open表
*/
(MapInfomapInfo,Nodecurrent)
{
intx=current.coord.x;
inty=current.coord.y;
//左
addNeighborNodeInOpen(mapInfo,current,x-1,y,DIRECT_VALUE);
//上
addNeighborNodeInOpen(mapInfo,current,x,y-1,DIRECT_VALUE);
//右
addNeighborNodeInOpen(mapInfo,current,x+1,y,DIRECT_VALUE);
//下
addNeighborNodeInOpen(mapInfo,current,x,y+1,DIRECT_VALUE);
//左上
addNeighborNodeInOpen(mapInfo,current,x-1,y-1,OBLIQUE_VALUE);
//右上
addNeighborNodeInOpen(mapInfo,current,x+1,y-1,OBLIQUE_VALUE);
//右下
addNeighborNodeInOpen(mapInfo,current,x+1,y+1,OBLIQUE_VALUE);
//左下
addNeighborNodeInOpen(mapInfo,current,x-1,y+1,OBLIQUE_VALUE);
}

/**
*添加一个邻结点到open表
*/
(MapInfomapInfo,Nodecurrent,intx,inty,intvalue)
{
if(canAddNodeToOpen(mapInfo,x,y))
{
Nodeend=mapInfo.end;
Coordcoord=newCoord(x,y);
intG=current.G+value;//计算邻结点的G值
Nodechild=findNodeInOpen(coord);
if(child==null)
{
intH=calcH(end.coord,coord);//计算H值
if(isEndNode(end.coord,coord))
{
child=end;
child.parent=current;
child.G=G;
child.H=H;
}
else
{
child=newNode(coord,current,G,H);
}
openList.add(child);
}
elseif(child.G>G)
{
child.G=G;
child.parent=current;
//重新调整堆
openList.add(child);
}
}
}85960618596061
(7)回溯法绘制路径
privatevoiddrawPath(int[][]maps,Nodeend)
{
if(end==null||maps==null)return;
System.out.println("总代价:"+end.G);
while(end!=null)
{
Coordc=end.coord;
maps[c.y][c.x]=PATH;
end=end.parent;
}
}12345678910111234567891011
(8)开始算法,循环移动结点寻找路径,设定循环结束条件,Open表为空或者最终结点在Close表

publicvoidstart(MapInfomapInfo)
{
if(mapInfo==null)return;
//clean
openList.clear();
closeList.clear();
//开始搜索
openList.add(mapInfo.start);
moveNodes(mapInfo);
}

/**
*移动当前结点
*/
privatevoidmoveNodes(MapInfomapInfo)
{
while(!openList.isEmpty())
{
if(isCoordInClose(mapInfo.end.coord))
{
drawPath(mapInfo.maps,mapInfo.end);
break;
}
Nodecurrent=openList.poll();
closeList.add(current);
addNeighborNodeInOpen(mapInfo,current);
}
}

④ AUV公链的机制是怎么样的

AUV公链采取了活性证明机制的共识机制,所有数据默认公开,通过其公共性来产生自己的安全性

热点内容
比特币远期合约 发布:2025-08-12 17:56:05 浏览:222
区块链的存储量与耗电量 发布:2025-08-12 17:54:35 浏览:749
usdt三个月不兑换 发布:2025-08-12 17:37:11 浏览:955
doge是什么词 发布:2025-08-12 17:36:14 浏览:804
现在购买什么矿机好 发布:2025-08-12 17:33:55 浏览:342
信用算力logo 发布:2025-08-12 17:17:38 浏览:11
中国区块链应用研究院 发布:2025-08-12 16:49:55 浏览:804
有些平台为啥转usdt不收手续费 发布:2025-08-12 16:33:29 浏览:662
以太坊新分叉 发布:2025-08-12 16:32:02 浏览:137
fk数字货币非小号 发布:2025-08-12 16:00:20 浏览:828