算法原理参考自 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
你可能感兴趣的:(算法学习)
【第10天】给定一个字符 c ,要求转换成大写进行输出 | 初识ASCII码
执 梗
《Java入门100练》 c语言 java 算法 蓝桥杯 数据结构
本文已收录于专栏《Java入门一百例》学习指引序、专栏前言一、什么是ASCII?二、【例题2】2、解题思路3、模板代码4、代码解析三、【例题2】2、解题思路3、模板代码4、代码解析四、奇淫巧技五、推荐专栏六、课后习题序、专栏前言 本专栏开启,目的在于帮助大家更好的掌握学习Java,特别是一些Java学习者难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末
数据结构与算法必知基础知识
程序员bigsai
文章精选 数据结构与算法 数据结构 算法 数据结构与算法
原创公众号:bigsai文章已收录在全网都在关注的数据结构与算法学习仓库欢迎star前言数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面,业界更有程序=数据结构+算法这个等式存在。各个中间件开发者,架构师他们都在努力的优化中间件、项目结构以及算法提高运行效率和降低内存占用,在这里数据结构起到相当重要的作用。此外数据结构也蕴含一些面向对象的思想,故学好掌握数据结构对逻辑思维处
【C++】双指针算法
星霜旅人
C++ c++ 算法
我们还有更长的路要走,不过没关系,道路就是生活。前言这是我自己学习蓝桥杯算法的第一篇博客总结。后期我会继续把蓝桥杯算法学习笔记开源至博客上。技巧1.双指针算法,但实际上是利用数组下标来充当指针,并不是直接使用指针。2.cur指针(current),扫描遍历指针,左边是已经扫描遍历的部分,中间及右边是还未扫描遍历的部分。3.dest指针(destination),分隔指针,左边是已经排好的序的部分,
C/C++算法编程竞赛基础算法篇:枚举、模拟和递归
BoFeather
C/C++算法学习之路 c语言 c++ 算法
目录前言这个栏目是对我算法学习过程的同步记录,我也希望能够通过这个专栏加深自己对编程的理解以及帮助到更多像我一样想从零学习算法并参加竞赛的同学。在这个专栏的文章中我会结合在编程过程中遇到的各种问题并提出相应的解决方案。当然,如果屏幕前的你有更好的想法或者发现的错误也欢迎交流和指出!不喜勿喷!不喜勿喷!不喜勿喷!那么事不宜迟,我们马上开始吧!一、枚举1.基本介绍2.代码示例二、模拟1.基本介绍2.代
【算法学习之路】4.简单数论(4)
零零时
算法学习之路 算法 学习 c++ 开发语言 数据结构 数学 高精度
简单数论(4)前言三.高精度1.什么是高精度2.解决办法精度乘除法一.精度乘法1.数据的存储2.步骤3.例题:高精度乘法二.精度除法1.例子2.步骤3.例题:高精度除法前言我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,滑动窗口的题单正在更新,其他的也会陆陆续续的更新,希望大家点赞收藏我会尽快更新的!!!三.高精度1.什么是高精度对运
ecc椭圆加密算法c语言,ECC 椭圆曲线加密算法学习————ECDH与ECDSA
weixin_39927508
ecc椭圆加密算法c语言
0x00前言之前学习了实数域上的椭圆曲线与有限域$\mathbb{F}_{p}$上的椭圆曲线。详细可以参考ECC椭圆加密算法学习————从实数域到有限域的椭圆曲线。不难发现,在实数域的标量乘法看上去是一个“简单”的问题,但是在有限域$\mathbb{F}_{p}$就显得非常困难。本文主要讨论如何将之前所学的运用于加密问题中。相关代码一些重要的域参数素数$p$椭圆曲线系数$a$与$b$基点(生成元)
算法学习——TEB算法
.小墨迹
算法学习 算法 学习 linux 开发语言 c++
TEB(TimedElasticBand)路径规划算法是一种基于优化的局部路径规划算法,广泛应用于移动机器人、自动驾驶等领域。它通过在机器人的运动轨迹上引入时间信息,结合动力学约束和环境约束,生成平滑且可行的路径。以下是对TEB算法的原理、实现方式、路线生成、约束条件设置以及参数调节的详细说明。1.TEB算法原理1.1核心思想TEB算法的核心思想是将机器人的运动轨迹表示为一个弹性带(Elastic
Python算法学习: 2020年蓝桥杯省赛模拟赛-Python题解
普通Gopher
Python算法
目录文章目录目录填空题1填空题2填空题3填空题4编程题1凯撒密码加密编程题2反倍数编程题3摆动序列编程题4螺旋矩阵编程题5村庄通电编程题6小明植树填空题1问题描述一个包含有2019个结点的无向连通图,最少包含多少条边?答案提交这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。答案:2018填空题2问题描述将LANQIAO中
力扣每日一题【算法学习day.130】
南宫生
算法 leetcode 学习 算法 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.奇偶数位题目链接:2595.奇偶位数-力扣(LeetCode)题面:分析:从右向左遍历每位即可代码:classSolution{publicint[]evenOddBit(intn){int[]ans=newint[2];intind
力扣每日一题【算法学习day.133】
南宫生
算法 leetcode 学习 算法 java
前言###我做这类文章一个重要的目的还是记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!习题1.设计跳表题目链接:1206.设计跳表-力扣(LeetCode)题面:代码:classSkiplist{int[]arr;publicSkiplist(){arr=newint[20005];}publicbooleansearch(i
【洛谷】P1886 滑动窗口 /【模板】单调队列,经典!
SiMmming
算法 算法 c++ 数据结构
目录题目AC代码详解deque语法一道经典的单调队列模板题!!“如果一个选手比你小还比你强,你就可以退役了。”——单调队列的原理——算法学习笔记(66):单调队列-知乎题目P1886滑动窗口/【模板】单调队列-洛谷【普及/提高-】AC代码#includeusingnamespacestd;intn,m;structNode{intid;//编号intval;//大小};dequeq1;//min,
力扣动态规划-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、
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