一 学习的开始
我是一名大三学生,擅长编程和算法,对于数学处于热爱,也是即将考11408的备考生。
面对当下的环境,我么们不得不过早做出选择,是考研或工作,保研在这就不谈了,毕竟我是跨考生。
对我来说,前路漫漫,做好长期的攻坚战,学习不是已成而就,大二参加了很多比赛,数模,物理实验,数学竞赛,力学竞赛,ros等,感觉自己有了方向,实际不是的,太多的事情,分散了我们的尽力,现在是看能力和学文的时代,没有好的平台很难去做项目和论文,自己很幸运的掌握了数据处理,在今后学习能在数据处理帮上理论老师的忙,但又很倒霉的陷入了机器学习和深度学习,操之过急了,每个学系阶段有该有的任务,我的c语言水平并不高,在这思路并不是很清晰,一我以后的学习中为例,如今比较有思路。
二 prim算法举例
prim算法
看做成一个暗夜游戏开始,我们要排民兵去探路,在我们待探索的路径中选择,如何让我们理解。
类似于贪心算法:在A开始,我们可以把A看作出生点,总司令部,可以选择B或F,我们派往B的收益最高,之后打开了B周边的视野,我们可以继续派民兵过去,之后发现对比F的路线是比较高的收益,之后选择I,C,G,注意F不可以选,由于ABGF
形成了环。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char VertexType;
typedef int EdgeType;
#define MAXSIZE 100
#define MAX 0x7fffffff//16进制的最大数
typedef struct{
VertexType vertex[MAXSIZE];
EdgeType arcs[MAXSIZE][MAXSIZE];
int vertex_num,edge_num;
}Mat_Graph;
void create_graph(Mat_Graph *G){
G->vertex_num=9;
G->edge_num=15;
G->vertex[0] = 'A';
G->vertex[1] = 'B';
G->vertex[2] = 'C';
G->vertex[3] = 'D';
G->vertex[4] = 'E';
G->vertex[5] = 'F';
G->vertex[6] = 'G';
G->vertex[7] = 'H';
G->vertex[8] = 'I';
for(int i = 0;i < G->vertex_num;i++)
{
for(int j = 0;j < G->vertex_num;j++)
{
if(i==j){
G->arcs[i][j]=0;
}
else{
G->arcs[i][j]=MAX;
}
}
}
//A-B A-C A-F B-C B-G B-I C-I D-C D-E D-G D-H E-F F-G F-H G-H G-I H-I
G->arcs[0][1]=10;
G->arcs[0][5]=11;
G->arcs[1][2]=18;
G->arcs[1][6]=16;
G->arcs[1][8]=12;
G->arcs[2][3]=22;
G->arcs[2][8]=8;
G->arcs[3][4]=20;
G->arcs[3][6]=24;
G->arcs[3][8]=21;
G->arcs[3][7]=16;
G->arcs[4][5]=26;
G->arcs[4][7]=7;
G->arcs[5][6]=17;
G->arcs[6][7]=19;
for(int i= 0;i<G->vertex_num;i++){
for(int j=0;j<G->vertex_num;j++){
G->arcs[i][j]=G->arcs[j][i];
}
}
}
void prim(Mat_Graph *G)
{
int i,j,k;
int min;
int weight[MAXSIZE];
int vex_index[MAXSIZE];
weight[0]=0;//候选边
vex_index[0]=0;//值表示时出发点
for(i=1;i<G->vertex_num;i++){
weight[i]=G->arcs[0][i];
vex_index[i]=0;
}
for(i=1;i<G->vertex_num;i++){
min=MAX;
k=0;
j=0;//找最小
for(int i=0;i<G->vertex_num;i++){
if(weight[j]!=0&&weight[j]<min){
min=weight[j];
k=j;
}
}
printf("%d,%d\n",vex_index[k],k);
weight[k]=0;
for(j=0;j<G->vertex_num;j++){
if(weight[j]!=0&&G->arcs[k][j]<weight[j]){
weight[j]=G->arcs[k][j];
vex_index[j]=k;
}
}
}
int main(int argc, char const *argv[])
{
Mat_Graph G;
create_graph(&G);
prim(&G);
return 0;
}
三 感受
路漫漫那其修远兮,吾将上下而求索。