J题解
先定义结构体数组用来存放,起点,终点和距离。初始化父数组,有几个点就初始化几个点。然后输入数据进行构图,该题需要把节点的值转化成数值存进结构体数组完成构图之后,首先要进行排序,排序的规则自己定义根据花费小的,
采用克鲁斯卡尔算法参数为每段的起点和终点,
查找的过程中要使用find函数寻找父节点。
int find(int x)
{
int r=x;
while(r!=per[r])
r=per[r];
return r;
}
进行老大的选择
int fx=find(x),fy=find(y);
if(fx!=fy)
{
per[fx]=fy;
return true;
}
return false;
最后fy当了fx的老大。
找出最小的花费,进行相加。
D题解
迪杰斯特拉算法**:主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止**。该题是求一个顶点到其余顶点的最短路径。先将所有城镇点都设标记未访问过,所有的路径都是无穷大,数组初始化,要么无穷大要么相等为0
进行输入(注意有多条路),核心算法,一直记录路径最短的及下标。
其余时间主要在写项目