随笔分类 -  数据结构与算法

摘要:l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。2、Find_Set(x) 查找一个元素所在的集合查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并... 阅读全文
posted @ 2013-05-05 09:04 Frank@609 阅读(510) 评论(0) 推荐(0)
摘要:#include<iostream>#include<vector>#include<set>#include<cmath>using namespace std;int lChild(int i){ return 2*i;}int rChild(int i){ return 2*i + 1;}void swap(int &a, int &b){ int t = a; a = b; b = t;}//min-heapvoid sift_down(int a[], int n, int i){ int min = i; int l 阅读全文
posted @ 2013-03-21 00:34 Frank@609 阅读(175) 评论(0) 推荐(0)
摘要:#include<iostream>#include<vector>using namespace std;void combination(const char str[],int num,vector<char> &result);void combination(const char str[]){ if(str == NULL) return; int len = strlen(str); int i=0; vector<char> result; for(i=1; i<=len; i++) combination(str, 阅读全文
posted @ 2013-03-13 21:34 Frank@609 阅读(223) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstring>using namespace std;void swap(char &a, char &b){ char t = a; a = b; b = t;}void permutation(char ch[],int s, int e){ int i = 0; if(s > e) return; if(s == e) { for(i=0; i<=e; i++) cout<<ch[i]; cout<<endl; r... 阅读全文
posted @ 2013-03-11 23:34 Frank@609 阅读(324) 评论(0) 推荐(0)
摘要:#include<iostream>using namespace std;int parent(int i){ return i/2;}int left(int i){ return 2*i;}int right(int i){ return 2*i + 1;}void swap(int &a, int &b){ int t = a; a = b; b = t;}void max_heapify(int arr[],int size, int i){ int l = left(i); int r = right(i); int large... 阅读全文
posted @ 2013-03-11 21:52 Frank@609 阅读(192) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;//回文有两种情况:aba或者abba,即有对称点和无对称点。int getSymLen(char *str,int pos){ int len = st 阅读全文
posted @ 2012-12-16 09:50 Frank@609 阅读(526) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;const int SIZE = 100000+5;int arrCount[SIZE];int main(){ int N,i,x; vector< 阅读全文
posted @ 2012-12-15 15:36 Frank@609 阅读(444) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;struct Node{ char strNum[10]; bool isUsed;};//获得字典序最小的数字,321,32这种情况要特殊考虑。stri 阅读全文
posted @ 2012-12-15 15:19 Frank@609 阅读(311) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;bool greaterCmp(int a, int b){ return a>b;}int main(){ int NC,NP,i,j,x; ve 阅读全文
posted @ 2012-12-15 10:38 Frank@609 阅读(229) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;struct Account{ char chUser[15]; char chPass[15]; bool isModified;};bool modi 阅读全文
posted @ 2012-12-15 10:09 Frank@609 阅读(164) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;struct Student{ char chName[15]; char chId[15]; int iScore;};bool lessCmp(Stu 阅读全文
posted @ 2012-12-15 09:34 Frank@609 阅读(236) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;vector<char> res(int t){ vector<char> v; char map[] = {'0' 阅读全文
posted @ 2012-12-14 16:59 Frank@609 阅读(218) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;const int MAX_N = 10000+5;const int MAX_TABLE = 100+5;const int OFF_TIME = 13 阅读全文
posted @ 2012-12-14 16:31 Frank@609 阅读(1297) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;const int MAX_N = 10000+5;const int MAX_WIN = 100+5;const int OFF_TIME = 9*60 阅读全文
posted @ 2012-12-11 18:23 Frank@609 阅读(852) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;struct Student{ char stu_id[15]; char strName[15]; int score;};Student arrStu 阅读全文
posted @ 2012-12-11 18:22 Frank@609 阅读(339) 评论(0) 推荐(0)
摘要:#include<iostream>#include<string>#include<queue>#include<vector>#include<cmath>#include<iomanip>#include<algorithm>using namespace std;struct Student{ string stu_id; int finRank; int locNum; int locRank; int score;};bool greaterMark(const Student &stu1, 阅读全文
posted @ 2012-12-10 16:39 Frank@609 阅读(489) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>using namespace std;//本题容易出错的地方:是在17:00及以后开始服务的客户输出"Sorry",而不是17:00之前结束服务的输出"Sorry";//如客户cId是16:59开始服务,服务时间为2,则输出的应该是17:01,而不是"Sorry"。co 阅读全文
posted @ 2012-12-10 11:31 Frank@609 阅读(1471) 评论(1) 推荐(0)
摘要:#include<iostream>#include<cstring>#include<queue>#include<vector>#include<cmath>#include<iomanip>using namespace std;struct Node{ int exp; double coe;};vector<Node> vRes;//将两个多项式相加,最后的结果保存在v1中。//即将两个有序链表merge在一起。void addPols(vector<Node> &v1,vecto 阅读全文
posted @ 2012-12-01 20:40 Frank@609 阅读(804) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstring>#include<queue>using namespace std;int main(){ char str[100]; int len,n1,n2; cin>>str; len = strlen(str); //先求出n1和n2 if( (len-1)%2 == 0 ) { n1 = (len-1)/2; n2 = 3; } else { n1 = (len-2)/2; n2 = 4; } wh... 阅读全文
posted @ 2012-12-01 15:39 Frank@609 阅读(198) 评论(0) 推荐(0)
摘要:#include<iostream>#include<cstring>#include<queue>using namespace std;//已知二叉树的后序和中序遍历,得到层次遍历顺序。const int N = 30;struct Node{ Node* left; Node* right; int data;};int postOrder[N];int inOrder[N];//b1,e1表示后序的开始和结束位置;b2,e2表示中序的开始和结束位置。void createTree(int b1,int e1,int b2,int e2,Node* & 阅读全文
posted @ 2012-12-01 14:45 Frank@609 阅读(353) 评论(0) 推荐(0)