在学校暑训了一个月,期间学到了几种算法。每种算法都有固定的模板,只要学会了模板,就可以参照模板来解决相应的问题。
目录
贪心
首先是贪心算法,需要用到sort这个函数,如果要用sort函数,必须调用algorithm这个包才能使用sort函数。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[5]={1,8,5,6,9};
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
cout<<endl;
sort(a,a+5);
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
cout<<endl;
sort(a,a+5,cmp);
for(int i=0;i<5;i++)
{
printf("%d ",a[i]);
}
cout<<endl;
return 0;
}
如果直接使用sort(a,a+5)来排序的话,会默认为从小到大排,如果想按照其他顺序排的话,可以自己在程序里面重新定义一个cmp的函数来改变他的排序方式。然后sort函数的调用,就是sort(a,a+5,cmp)
深搜
然后是深度搜索,深度搜索主要用到的是递归,通过不断地调用同一个函数,直到去到了尽头就返回。
这里我列举一个在一个二维的数组里面有字符'@'开始,连接在一起的 '.'字符有多少个的例子
int b[30][30];
int x,y,l,m,n;
int ax[4]={0,0,1,-1},ay[4]={1,-1,0,0};//行走顺序,左右下上
void dfs(int x,int y)
{
l++;
b[x][y]=1;//记录走过的位置
for(int i=0;i<4;i++)
{
int bx=x+ax[i];
int by=y+ay[i];
if(bx>=0&&bx<n&&by>=0&&by<m&&!b[bx][by]&&a[bx][by]=='.')
dfs(bx,by);
}
}
深搜也有其他的模板,只是目前我做过的题目里面,就只做过这种模板。日后要是遇到其他的深搜模板,会补上来。