《趣学算法》学习打卡Day 7
《趣学算法》学习打卡Day7
为了使程序代码的逻辑性更强,可阅读性更好,上课老师有教模块化编程,那么来看看:
模块化程序设计:
将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法。
利用函数: 不仅可以实现程序的模块化,使得程序设计更加简单和直观,从而提高了程序的易读性和可维护性 。
对函数是模块化的最佳选择,但是你有没有想过,你随手定义的a,b,c,m,n,等变量让代码的可读性直线下降呢?
那么对于学过面向对象编程的我们,结构体,类这些基本知识点是不是该运用起来了?
结构体:
struct 结构名
{
//成员列表(c++支持函数)
}
typedef struct 结构名
{
//成员列表
}别名
eg:
/*
古董:
属性:编号,重量
*/
struct antique{
int id; //古董的编号
double w; //古董的重量
}s[N];//N为const int N=1000005;
/*
宝物:
属性:重量,价值,性价比;
*/
struct three{
double w;//每个宝物的重量
double v;//每个宝物的价值
double p;//性价比
}s[M];//const int M=1000005;
/*
会议:
属性:开始时间,结束时间,会议编号
*/
struct Meet
{
int beg; //会议的开始时间
int end; //会议的结束时间
int num; //记录会议的编号
}meet[1000]; //会议的最大个数为1000
/*
结点:
属性:顶点u,源点到顶点u的最短路径step。
函数:重载构造函数
功能:重载运算符
*/
struct Node{
int u,step;
Node(){};
Node(int a,int sp){
u=a;step=sp;
}
bool operator < (const Node& a)const{ // 重载 <
return step>a.step;
}
};
类:
class name
{
private:
//成员列表;
public:
//成员列表;
}
class setMeet{
public:
void init();
void solve();
private:
int n,ans; // n:会议总数 ans: 最大的安排会议总数
};
函数:
void Dijkstra(int st){
priority_queue Q; // 优先队列优化
Q.push(Node(st,0));
memset(flag,0,sizeof(flag));//初始化flag数组为0
for(int i=1;i<=n;++i)
dist[i]=INF; // 初始化所有距离为,无穷大
dist[st]=0;
while(!Q.empty())
{
Node it=Q.top();//优先队列队头元素为最小值
Q.pop();
int t=it.u;
if(flag[t])//说明已经找到了最短距离,该结点是队列里面的重复元素
continue;
flag[t]=1;
for(int i=1;i<=n;i++)
{
if(!flag[i]&&map[t][i]dist[t]+map[t][i])
{ // 求距离当前点的每个点的最短距离,进行松弛操作
dist[i]=dist[t]+map[t][i];
Q.push(Node(i,dist[i]));// 把更新后的最短距离压入优先队列,注意:里面的元素有重复
}
}
}
}
}
stack栈:
//先进后出
进栈pop
出栈push
queue队列:
//先进先出
priority_queue优先队列:
//
template< class T>类模板:
const常量:
const int N=1000005;
bool布尔变量:
//bool值只有:true和false
//其中true=1,false=0;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
memset函数:
memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值
void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
//头文件:#include
sort函数:(这个我有在昨天讲过就不翻了)
总结:
有点迷茫的味道了,天天也没去那去,也没做出什么事,恼火呀////