算法原理参考自 http://blog.csdn.net/mynamelj/article/details/3071867
算法实现比较粗浅,但符合A*算法要求。
#define MAX_SIZE 800
#include
#include
#include
#include
#include
using namespace std;
struct tnode{
int gvalue;//以下3个参数是估计函数
int hvalue;
int fvalue;
tnode* parent;//不是父节点,而是指向当前节点
tnode* next;//指向链表的下一个节点
int pass;
int x;
int y;
};
tnode table[MAX_SIZE][MAX_SIZE];//存储地图
int MAX_SIZE_X,MAX_SIZE_Y;
int startx,starty,endx,endy;
tnode openlist,closelist;
//遍历链表,判段是否在列表中,找到返回1,否则返回0
int search(tnode *plist,int x,int y)
{
tnode *p=plist;
while(1)
{
if(p->next==NULL)
{
return 0;
}
if(p->next->x==x&&p->next->y==y)
{
return 1;
}
p=p-> next;
}
return 0;
}
//把table[hx][hy]加入openlist链表
int addtoopenlist(int hx,int hy)
{
//cout << "add to openlist "<< hx<<","<next==NULL)
{
break;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
return 0;
}
plist=plist-> next;
}
plist->next=&table[hx][hy];
return 1;
}
//把table[hx][hy]加入closelist链表
int addtocloselist(int hx,int hy)
{
//cout << "add to closelist "<< hx<<","<next==NULL)
{
break;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
return 0;
}
plist=plist-> next;
}
plist->next=&table[hx][hy];
return 1;
}
//把table[hx][hy]从openlist中移除
int delfromopenlist(int hx,int hy)
{
//cout << "delete from openlist "<< hx<<","<next==0)
{
return 0;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
qlist=plist->next->next;
plist->next->next=NULL;
plist->next=qlist;
break;
}
plist=plist-> next;
}
return 1;
}
int calculateGvalue(int hx,int hy,int px,int py,int value)
{
if(abs(hx-px)==1&&abs(hy-py)==1)
{
return value+14;//斜着走
}
else
{
return value+10;//直着走
}
}
int calculateHvalue(int hx,int hy)
{
return (abs(hx-endx)+abs(hy-endy))*10;
}
int handlenode(int hx,int hy,int curx,int cury)
{
//cout << "handle node " << hx <<"," << hy << endl;
if(hx<0||hy<0||hx>=MAX_SIZE_X||hy>=MAX_SIZE_Y)
return 0;
把目标格添加进开启列表
//addtoopenlist(hx,hy);
//这时候路径被找到
if(hx==endx&&hy==endy)
{
table[hx][hy].parent=&table[curx][cury];
return 1;
}
//如果它不可通过或者已经在关闭列表中,略过它
if(table[hx][hy].pass==0)
{
return 0;
}
//cout << "search closelist " << hx <<"," << hy << endl;
if(search(&closelist,hx,hy)==1)
{
//cout << "hx hy already in closelist " << hx <<"," << hy << endl;
return 0;
}
//如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,和H值。
if(search(&openlist,hx,hy)==0)
{
if(addtoopenlist(hx,hy)==1)
{
//cout << "add to openlist success " << hx <<"," << hy << endl;
}
table[hx][hy].parent=&table[curx][cury];
table[hx][hy].gvalue=calculateGvalue(hx,hy,table[curx][cury].x,table[curx][cury].y,table[curx][cury].gvalue);
table[hx][hy].hvalue=calculateHvalue(hx,hy);
table[hx][hy].fvalue=table[hx][hy].gvalue+table[hx][hy].hvalue;
}
else
{
//cout << "hx hy already in openlist "<< hx <<"," << hy << endl;
//更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的G和F值。
//如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。
if(calculateGvalue(hx,hy,table[curx][cury].x,table[curx][cury].y,table[curx][cury].gvalue)fvalue;
while(1)
{
if(p==NULL)
{
break;
}
if(p->fvaluefvalue;
q = p;
}
p = p->next;
}
return q;
}
int computervalue(int curx,int cury)
{//对每一个当前节点执行以下操作
if(handlenode(curx-1,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx-1,cury,curx,cury)==1)
return 1;
if(handlenode(curx-1,cury+1,curx,cury)==1)
return 1;
if(handlenode(curx,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx,cury+1,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury+1,curx,cury)==1)
return 1;
return 0;
}
void readmap()
{
ifstream infile;
infile.open("map.txt"); //注意文件的路径
infile>>MAX_SIZE_X>>MAX_SIZE_Y; //两行数据可以连续读出到变量里
for(int i=0;i> x;
table[i][j].pass=x;
}
}
infile.close();
return ;
}
void main()
{
tnode *pp;
openlist.next=NULL;
closelist.next=NULL;
MAX_SIZE_X=500;
MAX_SIZE_Y=500;
for (int i=0;i > x>> y;
// if(x==-1&&y==-1)
// {
// break;
// }
// table[x][y].pass=0;
//}
cout << "输入起始的位置,格式为坐标X 坐标Y " <> startx>> starty;
cout << "输入结束的位置,格式为坐标X 坐标Y " <> endx>> endy;
if(MAX_SIZE<=100)
{
for (int i=0;i x,p->y)==1)
{
//cout << "delete from openlist success " << p->x <<"," << p->y << endl;
}
if(addtocloselist(p->x,p->y)==1)
{
//cout << "add to closelist success " << p->x <<"," << p->y << endl;
}
//把目标格添加进了开启列表,这时候路径被找到
//break;
if(computervalue(p->x,p->y)==1)
{
break;
}
}
finish = clock();
duration = (double)(finish - start)/CLOCKS_PER_SEC;
printf( "using %lf seconds\n", duration );
pp=&table[endx][endy];
pp->next=NULL;
while(1)
{
if(pp->parent==NULL)
break;
pp->parent->next=pp;
pp=pp-> parent;
}
while(1)
{
if(pp->next==NULL)
break;
cout << "("< x<<","<< pp-> y <<")"<< " => ";
pp=pp-> next;
}
cout <<"("<
附:地图文件
50 50
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
你可能感兴趣的:(算法学习)
力扣动态规划-32【算法学习day.126】
南宫生
算法 # 动态规划 算法 leetcode 动态规划 学习 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.完全平方数题目链接:279.完全平方数-力扣(LeetCode)题面:代码:classSolution{privatestaticfinalint[][]memo=newint[101][10001];static{for(int[]
力扣每日一题【算法学习day.128】
南宫生
算法 # 动态规划 leetcode 学习 算法 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.区间内查询数字的频率题面:2080.区间内查询数字的频率-力扣(LeetCode)题面:分析:缓存每个数字的下标集合,然后通过二分快速算出满足区间的下标个数附上灵神代码:classRangeFreqQuery{privatefinal
用数组实现栈(java)
JD_LONG
算法 数据结构 java 栈
数据结构与算法学习(java)-栈题目一:用数组实现栈要求:*用数组形式实栈的基本功能,入栈,出栈及显示栈元素功能思路:1.准备一个数组int[]stack;需要变量maxSize表示栈的大小2.入栈(push):需要一个变量(top)来表示栈顶,初始化为-1;当有数据入栈时,top增加,同时将数据传递给stack[top].3.出栈(pop):需要定义变量来接住stack[top],然后top减
Matlab 机器人 雅可比矩阵
CodingAlgo
算法
===工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客===matlab求雅可比矩阵_六轴机械臂矢量积法求解雅可比矩阵-CSDN博客===(63封私信/80条消息)MATLAB机器人工具箱中机器人逆解是如何求出来的?-知乎===https://zhuanlan.zhihu.com/p/638
算法学习笔记之数学基础
threesevens
算法与数据结构 算法
例1(最小公倍数与最大公约数)计算最小公倍数公式:LCM(A,B)=A*B/GCD(A,B)A与B的最小公倍数等于A*B除以A与B的最大公约数计算最大公约数:辗转相除法原理:设A与B的最大公约数为x,则A是x的倍数,B也是x的倍数,令A=ax,B=bx,A/B取整为c,则A-cB=(a-bc)x。即A与B的余数也是x的倍数 intgcd(inta,intb) { inttemp; whil
算法学习笔记之贪心算法
threesevens
算法与数据结构 算法 笔记 贪心算法
导引(硕鼠的交易)硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。仓库有N个房间,第i个房间有J[i]磅奶酪并需要F[i]磅猫粮交换,硕鼠可以按比例来交换,不必交换所有的奶酪计算硕鼠最多能得到多少磅奶酪。输入M和N表示猫粮数量和房间数量,随后输入N个房间,每个房间包括奶酪数和猫粮数Input 53 72 43 52 -1-1Output 13.333解法:计算每个房间的奶酪与猫粮之比,比值越大硕鼠收益越
力扣动态规划-28【算法学习day.122】
南宫生
# 动态规划 算法 算法 leetcode 动态规划 java 学习
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.执行操作可获得的最大总奖励I题目链接:3180.执行操作可获得的最大总奖励I-力扣(LeetCode)题面:附上灵神代码:importjava.math.BigInteger;classSolution{publicintmaxTot
力扣动态规划-24【算法学习day.118】
南宫生
算法 # 动态规划 算法 leetcode 动态规划 学习 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.和为目标值的最长子序列的长度题目链接:2915.和为目标值的最长子序列的长度-力扣(LeetCode)题面:附上大佬代码:classSolution{publicintlengthOfLongestSubsequence(Listnu
深入理解栈与队列:算法学习者的必备指南
m0_dawn
蓝桥杯 算法 python leetcode 数据结构
本文专为算法学习者设计,揭示栈与队列的核心原理及底层实现机制。文末附各语言实现模板和LeetCode练习题。一、基础概念可视化1.1栈(Stack)的直观理解LIFO原则:类似叠盘子,后放入的盘子先被取出核心操作:#Python示例stack=[]stack.append(5)#入栈(Push)top=stack[-1]#查看栈顶(Peek)stack.pop()#出栈(Pop)1.2队列(Que
【算法学习之路】4.简单数论(2)
零零时
算法学习之路 算法 学习 数据结构 笔记 经验分享
简单数论(2)前言二.快速幂1.什么是快速幂2.前置知识2.1进制转化2.2短除法2.3普通转换法3.快速幂3.1原理3.2代码4.拓展4.1模运算法则4.2题目前言我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,滑动窗口的题单正在更新,其他的也会陆陆续续的更新,希望大家点赞收藏我会尽快更新的!!!二.快速幂1.什么是快速幂快速幂是一
力扣动态规划-12【算法学习day.106】
南宫生
算法 # 动态规划 算法 leetcode 动态规划 java 数据结构
前言###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.乘积最大子数组题目链接:152.乘积最大子数组-力扣(LeetCode)题面:代码:classSolution{publicintmaxProd
力扣动态规划-10【算法学习day.104】
南宫生
算法 # 动态规划 算法 leetcode 动态规划 java 学习
前言###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.环形子数组的最大和题目链接:918.环形子数组的最大和-力扣(LeetCode)题面:附上灵神代码:classSolution{publicin
【算法学习】分治法应用—归并排序
_Huazzi
算法学习笔记 算法 学习 排序算法 C++ 分治法
归并排序是分治思想的运用。文章目录基本思想:分治之美核心算法✂️分治流程:️过程演示⌛分步实现⌨️完整代码性能分析❓常见问题优化建议基本思想:分治之美将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。归并排序(MergeSort)是分治思想的经典应用。其核心理念是:分解:将复杂的大问题分割成简单的小问题解决:逐步解决小问题合并:将
【算法学习】分治法应用—快速排序
_Huazzi
算法学习笔记 算法 数据结构 排序算法
欢迎来到“C语言算法学习”系列!快速排序(QuickSort)是一种非常高效的排序算法,广泛用于实践中。在这篇文章中,我们将详细介绍快速排序的工作原理、C语言实现,并提供一些优化建议、常见问题的解答以及编程技巧。快速排序简介快速排序是分治算法的一种,它的基本思想是:选择一个“分界点”元素,将数组分成两部分,使得左边的所有元素都不大于分界点,右边的所有元素都不小于分界点。然后,递归地对这两部分进行排
【算法学习】归并排序算法思想的应用—求逆序对数量
_Huazzi
算法学习笔记 算法 排序算法 学习 c++ 分治法
Hey,大家好!今天我们来聊聊一个有趣的话题——如何在归并排序的基础上,高效解决求逆序对数量的问题。如果你对算法感兴趣,或者正在准备算法面试,这篇文章一定会对你有所帮助!题目描述给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第i个和第j个元素,如果满足ia[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含n个整数,表示整
算法学习019 BFS实现迷踪步 c++算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析
小兔子编程
信奥算法详解 算法 宽度优先 BFS C++BFS 广度优先算法 c++迷宫步数 c++迷踪步
C++BFS实现迷踪步一、题目要求1、编程实现有一个n行m列的方格迷宫,用0表示可以通过,用1表示不可以通过,每一步可以向上、下、左、右任意方向移动一格,请计算从左上角(1,1)位置移动到右下角(n,m)位置,最少移动多少步?2、输入输出输入描述:第一行输入矩阵大小n和m
C语言青蛙跳台阶问题
共享家9527
c语言
在算法学习中,青蛙跳台阶问题是一个经典的递归和动态规划入门案例。它通过简单的场景,揭示了复杂的算法思想,非常适合初学者理解递归与动态规划的核心概念。一、问题描述一只青蛙要跳上n级台阶,每次它可以跳1级或者2级台阶。那么,青蛙跳上n级台阶总共有多少种不同的跳法呢?二、解题思路递归思路:-对于第n级台阶,青蛙到达它的方式要么是从第n-1级台阶跳1级上来,要么是从第n-2级台阶跳2级上来。-所以,跳上n
Day_1 数据结构与算法&LeetCode入门及攻略
Finger-Von-Frings
c++ leetcode
数据结构与算法学习目的:我们学习算法和数据结构,是为了学会在编程中从时间复杂度、空间复杂度方面考虑解决方案,训练自己的逻辑思维,从而写出高质量的代码,以此提升自己的编程技能,获取更高的工作回报。数据结构定义:数据结构(DataStructure)指的是带有结构特性的数据元素的集合。学习的目的:为了帮助我们了解和掌握计算机中的数据是以何种方式进行组织、存储的。Q1:何为结构特性?所谓结构特性,指的是
LeetCode 热题 HOT 100
Dong雨
力扣hot100 leetcode 算法
点个关注,不迷路!(╯▽╰)好香~~在学习过程中,借助一些优秀的工具可以极大地提升我们的学习效率。例如,使用LeetCode插件,它能够帮助你显示力扣周赛难度分数,让你更好地了解题目的难度,从而合理安排学习计划。算法学习路线推荐基础夯实:先过B站“灵茶山艾府”的“基础算法精讲”专栏,完成每一栏简介里的习题。每日精进:坚持每日一题,保持对算法的敏感度。系统提升:依次完成力扣Hot100、力扣150、
java搜索DFS BFS 剪枝 记忆化搜索相关例题算法学习笔记(持续更新中)
ddb酱
java 学习 笔记
目录DFSP1706全排列问题P1596连接水池的数量P1036[NOIP2002普及组]选数P1219[USACO1.5]八皇后CheckerChallengeP2392kkksc03考前临时抱佛脚P2036[COCI2008-2009#2]PERKETP1605迷宫P1101单词方阵,以后再做,看别人的题解做的P2404自然数的拆分问题,以后在做BFSP1443马的遍历P1596连接水池的数量
好用的算法推荐工具全解析
CodeJourney.
算法
一、引言在当今数字化时代,算法广泛应用于各个领域,从搜索引擎优化到金融风险预测,从图像识别到自然语言处理。对于算法学习者、研究者以及开发者而言,合适的算法推荐工具至关重要。它们不仅能帮助理解算法原理,还能在实际应用中提供高效的解决方案。接下来,我们将详细介绍多种好用的算法推荐工具。二、算法可视化工具(一)VisuAlgo功能特点-动态演示:VisuAlgo能够以动态的方式展示各类算法的执行过程。例
c语言输入两个字符串 按字典数序比较大小,算法学习笔记(一)C++排序函数、映射技巧与字典树...
Nature自然科研
c语言输入两个字符串 按字典数序比较大小
1.头文件algorithm中有函数sort()用于排序,参数为:排序起始地址,排序结束地址,排序规则(返回bool型)例如,要将array[]={5,7,1,2,9}升序排列,则使用:boolcmp(inta,intb);intmain(){intarray[]={5,7,1,2,9};sort(array,array+5,cmp);for(inti=0;icoutb)returnfalse;e
推荐算法学习记录2.2——kaggle数据集的动漫电影数据集推荐算法实践——基于内容的推荐算法、协同过滤推荐
萱仔学习自我记录
推荐算法学习 python matplotlib 开发语言
1、基于内容的推荐:这种方法根据项的相关信息(如描述信息、标签等)和用户对项的操作行为(如评论、收藏、点赞等)来构建推荐算法模型。它可以直接利用物品的内容特征进行推荐,适用于内容较为丰富的场景。#1.基于内容的推荐算法fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.metrics.pairwiseimport
邓俊辉数据结构与算法学习笔记-第五章
xiaodidadada
数据结构与算法
文章目录树aa1树a2应用a3有根树a4有序树a5路径a6连通图无环图a7深度层次b在计算机中表示b1树的表示b2父节点b3孩子节点b4父亲孩子表示法b5长子兄弟表示法c二叉树c1二叉树概述c2真二叉树c3描述多叉树d二叉树d1BinNode类d2BinNode接口d3BinTree类d4高度更新d5节点插入e相关算法e1-1先序遍历转化策略e1-2遍历规则e1-3递归实现e1-4迭代实现e1-5
2024.8.14-算法学习(原创+转载)
蓝纹绿茶
算法 学习 人工智能
一、投机采样图源自投机采样推理原理-66Ring'sBlog投机采样(SpeculativeDecoding)是Google和DeepMind在2022年同时发现的大模型推理加速方法。它可以在不损失生成效果前提下,获得3x以上的加速比。大型语言模型(LLM)的推理通常需要使用自回归采样。它们的推理过程相当缓慢,需要逐个token地进行串行解码。生成每个标记都需要将所有参数从存储单元传输到计算单元,
算法学习-2024.8.16
蓝纹绿茶
学习
一、Tensorrt学习补充TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用32位或16位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。一个深度学习模型,在没有优化的情况下,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三
算法学习每日一题数位不同的组合
故里
算法 学习
Problem:3153.所有数对中数位不同之和思路本题关键在于如何处理数位不同的个数,其实就是组合问题,两个不同数字的不同数位只能算一对,所以我们不妨把后方元素与前方元素数位不同算作一对,保持单调性避免重复计数。那么后方元素不同的数位应该如何统计呢,我们不妨使用哈希表,一维表示统计的数位位数,二维表示数位0~9。某一数位位数下数位与前方元素不同的个数,就是当前遍历到的所有元素数目-该数位相同的元
算法学习笔记-复杂度分析上
胖琪的升级之路
如何分析、统计算法的执行效率和资源消耗为什么需要复杂度分析首先我们很多程序都可以通过统计,监控等方式帮助我们得到程序执行的时间与占用的内存大小。但是这些统计方法有很大的局限性。测试结果非常依赖测试环境。不同的测试机器,同样的代码执行效率就不同。测试结果数受数据规模的影响很大。数据规模大,我们的代码执行效率低。测试结果不能真正的反应我们的内容大O复杂度表示法我们假设一行代码执行一次的时间是unit_
粒子群优化算法和强化算法的优缺点对比,以表格方式进行展示。详细解释
资源存储库
笔记 笔记
粒子群优化算法(PSO)和强化学习算法(RL)是两种常用的优化和学习方法。以下是它们的优缺点对比,以表格的形式展示:特性粒子群优化算法(PSO)强化学习算法(RL)算法类型优化算法学习算法主要用途全局优化问题,寻找最优解学习和决策问题,优化策略以最大化长期奖励计算复杂度较低,通常不需要梯度信息;计算复杂度与粒子数量和迭代次数有关较高,涉及到策略网络的训练和环境交互;复杂度取决于状态空间、动作空间以
算法学习6——贪心算法
零 度°
算法学习 算法 学习 贪心算法
什么是贪心算法?贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择的算法。其核心思想是通过一系列局部最优选择来达到全局最优解。贪心算法广泛应用于各种优化问题,如最短路径、最小生成树、背包问题等。贪心算法的特点局部最优选择:每一步都做出在当前情况下最优的选择。无后效性:一旦某个状态被确定,就不会再被改变或回溯。逐步构造解决方案:通过一系列的选择逐步构建出最终的解决方案。经典例子及其Pyt
springmvc 下 freemarker页面枚举的遍历输出
杨白白
enum freemarker
spring mvc freemarker 中遍历枚举
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。
enum
public enum BooleanEnum {
TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");
实习简要总结
byalias
工作
来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结:
(1)工作技能方面
大体分为两个阶段,Java Web 基础阶段和Java EE阶段
1)Java Web阶段
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过
了一遍,也
Quartz——DateIntervalTrigger触发器
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间
Unix快捷键
18289753290
unix Unix;快捷键;
复制,删除,粘贴:
dd:删除光标所在的行 &nbs
获取Android设备屏幕的相关参数
酷的飞上天空
android
包含屏幕的分辨率 以及 屏幕宽度的最大dp 高度最大dp
TextView text = (TextView)findViewById(R.id.text);
DisplayMetrics dm = new DisplayMetrics();
text.append("getResources().ge
要做物联网?先保护好你的数据
蓝儿唯美
数据
根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就
Java取模(求余)运算
随便小屋
java
整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码:
/**
*
* @author Logic
*
*/
public class Test {
public static void main(String[] args) {
// TODO A
SQL注入介绍
aijuans
sql注入
二、SQL注入范例
这里我们根据用户登录页面
<form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor
优雅代码风格
aoyouzi
代码
总结了几点关于优雅代码风格的描述:
代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。
接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。
依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。
没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。
战术分层:代码分层清晰,隔离明确,
布尔数组
百合不是茶
java 布尔数组
androi中提到了布尔数组;
布尔数组默认的是false, 并且只会打印false或者是true
布尔数组的例子; 根据字符数组创建布尔数组
char[] c = {'p','u','b','l','i','c'};
//根据字符数组的长度创建布尔数组的个数
boolean[] b = new bool
web.xml之welcome-file-list、error-page
bijian1013
java web.xml servlet error-page
welcome-file-list
1.定义:
<welcome-file-list>
<welcome-file>login.jsp</welcome>
</welcome-file-list>
2.作用:用来指定WEB应用首页名称。
error-page1.定义:
<error-page&g
richfaces 4 fileUpload组件删除上传的文件
sunjing
clear Richfaces 4 fileupload
页面代码
<h:form id="fileForm"> <rich:
技术文章备忘
bit1129
技术文章
Zookeeper
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案
白糖_
Hibernate
文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181
在编写HQL时,可能会出现这种代码:
select a.name,b.age from TableA a left join TableB b on a.id=b.id
如果这是HQL,那么这段代码就是错误的,因为HQL不支持
sqlserver按照字段内容进行排序
bozch
按照内容排序
在做项目的时候,遇到了这样的一个需求:
从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面;
select * fro
编程珠玑-第一章-位图排序
bylijinnan
java 编程珠玑
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;
public class BitMapSearch {
Java关于==和equals
chenbowen00
java
关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况:
1、
String a = "aaa";
a=="aaa";
==> true
2、
new String("aaa")==new String("aaa
[IT与资本]软件行业需对外界投资热情保持警惕
comsci
it
我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境...
如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然
oracle 数据块结构
daizj
oracle 块 数据块 块结构 行目录
oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为:
块头--〉空行--〉数据,其实际为纵行结构。
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标
github上一些觉得对自己工作有用的项目收集
dengkane
github
github上一些觉得对自己工作有用的项目收集
技能类
markdown语法中文说明
回到顶部
全文检索
elasticsearch
bigdesk elasticsearch管理插件
回到顶部
nosql
mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用
C
初二上学期难记单词二
dcj3sjt126com
english word
dangerous 危险的
panda 熊猫
lion 狮子
elephant 象
monkey 猴子
tiger 老虎
deer 鹿
snake 蛇
rabbit 兔子
duck 鸭
horse 马
forest 森林
fall 跌倒;落下
climb 爬;攀登
finish 完成;结束
cinema 电影院;电影
seafood 海鲜;海产食品
bank 银行
8、mysql外键(FOREIGN KEY)的简单使用
dcj3sjt126com
mysql
一、基本概念
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
3、如
java循环标签 Foreach
shuizhaosi888
标签 java循环 foreach
1. 简单的for循环
public static void main(String[] args) {
for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {
System.err.println("i=" + i + " y="
Spring Security(05)——异常信息本地化
234390216
exception Spring Security 异常信息 本地化
异常信息本地化
Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x
DUBBO架构服务端告警Failed to send message Response
javamingtingzhao
架构 DUBBO
废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。
WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)
JS中Date对象中几个用法
leeqq
JavaScript Date 最后一天
近来工作中遇到这样的两个需求
1. 给个Date对象,找出该时间所在月的第一天和最后一天
2. 给个Date对象,找出该时间所在周的第一天和最后一天
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用
使用setDate方法前,先看看getDate
var date = new Date();
console.log(date);
// Sat J
MFC中使用ado技术操作数据库
你不认识的休道人
sql mfc
1.在stdafx.h中导入ado动态链接库
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti
Android Studio加速
rensanning
android studio
Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。
(1)设置Android Studio
a) 禁用插件
File -> Settings... Plugins 去掉一些没有用的插件。
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud
各数据库的批量Update操作
tomcat_oracle
java oracle sql mysql sqlite
MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。
MSSQL的SQL语句
WITH R AS(
SELECT 'John' as name, 18 as
html禁止清除input文本输入缓存
xp9802
input
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name