kruskal算法的一点就是不能形成环路,而且是从排列好的边集合依次选出最小的边,每次选出的顶点都要放在同一个边集合中,之后在顶点集合选两个顶点的边,要求这两个顶点不能在边集合中,这样才能保障不形成环路。 一、链表表示 #include<stdio.h> #include<stdlib.h> /* kruskal,最小生成树,利用链表,并查集的知识 */ typedef struct{ int bef; int aft; int weight; }pic_node;//图中点的结构体 typedef struct find_set{ int data; struct find_set *next; }NODE;//点集合的节点 typedef struct set_head{ NODE *head; NODE *tail; int flag; }HEAD;//点集合的头 HEAD set[20] 继续阅读 >>


陈文浩 18/01/15 15:08:38
#include<iostream> #include<vector> using namespace std; void shellsort(vector<int> &arr); int main() { vector<int> arr{0,9,8,7,6,5,4,3,2,1}; shellsort(arr); for(auto i = arr.begin() + 1;i!=arr.end();i++) cout << *i <<" "; } void shellsort(vector<int> &arr) { int i,j; int increment = arr.size(); do{ increment = increment / 3 + 1;//增量 for(int i = increment + 继续阅读 >>


陈文浩 18/01/14 21:55:44
java有可以获得数组大小的函数,但是c++没有,在写函数的时候发现了一些问题,就是传数组名的时候,会在函数中将数组退化成指针,得不到想要的结果,使用引用之后就不会有这样的问题 #include<iostream> #include<typeinfo> #include<vector> using namespace std; // 使用 int[] template <typename T> inline int get_array_len(T &p) { return sizeof(T) / sizeof(*p); } void insertsort(int arr[], int n) { int j = 0; for(int i = 2; i < n; i++) { if(arr[i] < arr[i-1]) { arr[0] = arr 继续阅读 >>


陈文浩 18/01/14 20:33:26
import java.util.*; public class Main { public static void main(String[] args){ Random random = new Random(10);//随机种子 for(int i=0;i < 10;i++){ System.out.println(random.nextInt(1000));//nextInt可以规定范围 } } } 作者:m0_37787222 发表于 2018/01/10 22:48:12 原文链接 https://blog.csdn.net/m0_37787222/article/details/79029200 继续阅读 >>


陈文浩 18/01/10 22:48:12
使用公历类GregorianCalendar 使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14 输入格式: 输入 1234567898765 (毫秒数) 输出格式: 输出 2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份) 输入样例: 1450921070108 输出样例: 2015-11-24 import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner; public class Main { public static void main(Strin 继续阅读 >>


陈文浩 18/01/10 17:15:07
#include<iostream> #include<cstring> using namespace std; void byteorder(); int main() { byteorder(); return 0; } void byteorder() { union{ short value; char union_bytes[sizeof(short)]; }test; test.value = 0x0102;//二进制为100000010 /*当小端取低字节8位二进制00000010转换就是2,再取一位就是1 同理大端就是1,2 */ if((test.union_bytes[0]==1)&&test.union_bytes[1]==2) cout <<"big endian"<<endl; 继续阅读 >>


陈文浩 17/12/27 21:25:10
今天感谢佳露大佬,学会了特别装逼的交换两个变量不用中间变量的方法,瞬间觉得之前学的low爆了!!!直接看代码。 #include<iostream> using namespace std; int main() { int64_t a=10; int64_t b=20; printf("交换前a,b的值分别为:\n"); printf("a=%d\n",a); printf("b=%d\n",b); b = (a << 32 | (a = b)) >> 32; printf("交换前a,b的值分别为:\n"); printf("a=%d\n",a); printf("b=%d\n",b); return 0; } 作者:m0_37787222 发表于 2017/12/12 22:46:30 原 继续阅读 >>


陈文浩 17/12/12 22:46:30
算法训练 Lift and Throw 问题描述   给定一条标有整点(1, 2, 3, …)的射线. 定义两个点之间的距离为其下标之差的绝对值.   Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点.   每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次.   1.移动一定的距离   2.把另一个角色高举过头   3.将举在头上的角色扔出一段距离   每个角色有一个movement range参数, 他们只能移动到没有人的位置, 并且起点和终点的距离不超过movement range.   如果角色A和另一个角色B距离为1, 并且角色B没有被别的角色举起, 那么A就能举起B. 同时, B会移动到A的位置,B原来所占的位置变为没有人的位置. 被举起的角色不能进行任何操作, 举起别人的角色不能移动.同时, 每个角色还有一个throwing range参数, 即他能把举起的角色扔出的最远的距离. 注意, 一 继续阅读 >>


陈文浩 17/12/10 15:59:37
#include<stdio.h> #define MAX 6 int n = MAX; int cost[][MAX] = { { 0, 50, 10,1000, 45,1000}, {1000, 0, 15,1000, 10,1000}, { 20,1000, 0, 15,1000,1000}, {1000, 20,1000, 0, 35,1000}, {1000,1000, 30,1000, 0,1000}, {1000,1000,1000, 3,1000, 0} };//各个点的值 int distance[MAX][MAX]={0};//最终距离 void allcosts(int cost[][MAX],int distance[][MAX],int n); int main() { allcosts(cost,distance,n); for(int i = 继续阅读 >>


陈文浩 17/12/04 21:24:51
思路: ①随意选择一个点v,然后用distance数组记录起始点v到所有点的距离 ②然后在distance数组中找到起始点v到哪一个点的距离最短,以这个点u为中介,found[u]=1,证明集合中已经有这个点,证明该点走过 ③使用choose函数通过循环,可以知道哪一个点到起始点最短,返回该点的索引u ④然后再以u这个点开始,去没有走过的点w(found数组中没有标记为1的点)一一试探,只要distance[u]到某一点w的距离(即distance[u]+cost[u][w] )小于w到起始点的距离(distance[w]),则修改distance[w],即distance[w]是到起始点v的最小距离 #include<stdio.h> #define MAX 6 int cost[][MAX] = { { 0, 50, 10,1000, 45,1000}, {1000, 0, 15,1000, 10,1000}, 继续阅读 >>


陈文浩 17/12/04 20:47:41