算法
洛樱冰飞
这个作者很懒,什么都没留下…
展开
-
二分图的最大匹配
匈牙利算法的两种实现:1.DFS找增广路#include #include using namespace std;const int MAXN = 100;int uN, vN; // u,v数目 bool g[MAXN][MAXN]; // g[i][j] 表示 x原创 2014-05-08 10:51:36 · 518 阅读 · 1 评论 -
畅通工程算法及代码
如果一条路都没有,总共要修的路为n-1,每输入一条路就与之前输入的路比较,若没有构成环,则要修的路减少一条,知道所有已经修好的路输完为止.#includeint f[1000],k,n,m;int father(int x){ int r=x; while(r!=f[r])//算出所有点的根结点,当且仅当父接点与该点相同时,该点为根结点. r=f[r]; return r;}原创 2014-05-08 10:50:53 · 524 阅读 · 0 评论 -
非常可乐
#include#include#includeusing namespace std;int h,a,b;struct Node{ int x; int y; int z; int v;};int vis[101][101][101];void bfs(int a1,int a2,int a3){ queueq; Node q1,q2; q1.x=a1; q1原创 2014-05-08 10:50:51 · 468 阅读 · 0 评论 -
set matrix zeros
title:Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.原创 2014-09-19 19:39:56 · 614 阅读 · 1 评论 -
字符串匹配算法
http://biaobiaoqi.me/blog/2013/05/25/kmp-algorithm/原创 2013-11-20 23:24:37 · 934 阅读 · 0 评论 -
螺旋矩阵
题目:原创 2014-09-19 23:18:31 · 703 阅读 · 2 评论 -
Catch That Cow代码
#include#includeusing namespace std;int m,n;int visit[100005];struct Node{ int num;int a;};int bfs(){ queue myqueue;Node st,ed; st.num=0;st.a=m;memset(visit,0,sizeof(visit));m原创 2014-05-08 10:50:47 · 409 阅读 · 0 评论 -
多个有序数列中查找第k小值
问题描述:原创 2014-10-24 21:02:00 · 1019 阅读 · 0 评论 -
子数组的最大乘积
问题描述:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合乘积中最大的一组,并写出算法的时间复杂度。问题分析:先来分析数组的正负情况1、如果数组中至少有两个是0,那么子数组的最大乘积必为02、如果数组中包含一个0,分情况讨论 (1)、如果数组中有偶数个负数,那么他的乘积为除了0以外N-1个数的乘积 (2)、如果数组中有奇原创 2014-10-28 10:40:58 · 594 阅读 · 0 评论 -
迪杰斯特拉算法求最短路径
算法思想:原创 2014-10-03 16:59:18 · 738 阅读 · 0 评论 -
Farey 分数
#includetypedef struct Node{int a,b; struct Node *next;}Node,*linklist;void innilist(linklist &L){L=new Node;L->next=NULL;}void insert(int a1,int b1,Node *q){//在q后面插入结点。 Node *s=new No原创 2014-05-08 10:51:06 · 597 阅读 · 0 评论 -
1065--Wooden Sticks解题报告
题目大意是只要后面的木棍长度和重量都不比前面小就不用花费准备时间。。。所以,只要使数组尽可能按要求排列即可,定义一结构体表示木棍的性质。排序:按重量从小到大排列,若重量相等,则按长度从小到大排列。递归:从第一个数开始,逐个进行搜索,若符合长度和重量都递增的条件的去掉,不符合的装入另一个结构体中,在对剩下的木棍进行搜索,一直到所得结构体为空为止。每一次递归,总数增加一,最后所得总数就是所求数;原创 2014-05-08 10:50:58 · 567 阅读 · 0 评论 -
畅通工程再续算法思想及代码
源程序:http://acm.hdu.edu.cn/showproblem.php?pid=1875算法思想:很明显这是一道关于最小生成树的题目,又因为边的数目远远大于点的数目,故采用prim算法。(1)首先指定一个顶点v将其加入U中(设置len[i]=0).(2)初始化每点到U的距离:算出其他点到点v的距离,若距离大于1000或小于10,则该路肯定不能修,可设置为这两点间没有路(设置的该原创 2014-05-08 10:51:15 · 497 阅读 · 0 评论 -
粒子群算法二
原文地址:粒子群算法二作者:李一遥 在上一节的叙述中,唯一没有给大家介绍的就是函数的这些随机的点(粒子)是如何运动的,只是说按照一定的公式更新。这个公式就是粒子群算法中的位置速度更新公式。下面就介绍这个公式是什么。在上一节中我们求取函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。并在[0,4]之间放置了两个随机的点,这些点的坐标假设为x1=1.5;x2=2.5;这里的点是一个标转载 2014-05-08 10:51:34 · 768 阅读 · 0 评论 -
两个递增有序链表合并为一个链表
}#includetypedef struct Node{int a;Node *next;}Node,*linklist;void dislist(linklist &L){//输出链表。Node *p1=L->next;while(p1!=NULL){printf("%d ",p1->a);p1=p1->next;}printf("\n");}void create原创 2014-05-08 10:51:04 · 934 阅读 · 0 评论 -
八皇后问题
#include#include#include#define N 8int left[2*N+1];int right[2*N+1];int column[N+1];int a[N+1];int times=0;void show(){times++;printf("第%d个\n",times);int i,j;for(i=1;ifor(j=1;j原创 2014-05-08 10:51:21 · 464 阅读 · 0 评论 -
LC-Display代码
#include#includeintd[10][7]={{1,1,1,0,1,1,1},{0,0,1,0,0,1,0},{1,0,1,1,1,0,1},{1,0,1,1,0,1,1},{0,1,1,1,0,1,0},{1,1,0,1,0,1,1},{1,1,0,1,1,1,1},{1,0,1,0,0,1,0},{1,1,1,1,1,1,1},{1,1,1,1,0,1,1}};int原创 2014-05-08 10:51:02 · 445 阅读 · 0 评论 -
Wall算法分析与设计
总长度为凸包长度加上以L为半径的圆的周长,n边形的内角和为(n-2)*180,而扇形内角和加上多边形内角和恰为n*180(多边形每个角与对应圆弧的扇形所对应的角互补).求凸包:(1)排列:选出纵坐标最小的点,(若存在两点纵坐标相同,则取横坐标小的点)为起点,依次与其他点连接,按极坐标从小道大依次排列(根据叉乘,极坐标小的点在左边.:如线段p1,p2,若p1在p2左边,则(p1.x*p2.y)-原创 2014-05-08 10:51:00 · 804 阅读 · 0 评论 -
最大子序列
#includeint main(){int n,a[1000],max,s;int f,l,i,j;while(scanf("%d",&n)&&n>0){f=l=j=1;max=-1001;s=0;for(i=1;iscanf("%d",&a[i]);s+=a[i];if(s>max){max=s;f=j;l=i;}if(ss=0;j=i+1;}}pri原创 2014-05-08 10:51:30 · 467 阅读 · 0 评论 -
矩阵链乘法
#include #define maxint 99999int p[100],m[100][100],s[100][100];int n;void find(int i,int j){if(i==j)printf("A%d",i);else{int k=s[i][j];printf("(");find(i,k);find(k+1,j);printf(")");}}i原创 2014-05-08 10:51:26 · 459 阅读 · 0 评论 -
中序线索二叉树的实现
#includetypedef char Elemtype;typedef struct TbNode{ Elemtype info;TbNode *Lchild,*Rchild;int Ltag,Rtag;}TBTNode;TBTNode *root=0;TBTNode *prev;void insert(Elemtype el){ TBTNode *pre=0原创 2014-05-08 10:51:13 · 391 阅读 · 0 评论 -
最长公共子序列
#include#includeint m,n;int a[100],b[100];int c[100][100];//存储对应的a[i]与b[j]的最大子序列char d[100][100];//存储该位置到最大子序列走向void lecLength(){//求出对应的c[][],d[][]; int i,j; for(i=0;ic[i][0]=0;for(j=0原创 2014-05-08 10:51:28 · 421 阅读 · 0 评论 -
sticks代码
#include#include#includeusing namespace std;int len[65];int visit[65];int lon,n,s;bool cmp(int a,int b){return a>=b;}bool dfs(int cnt,int index,int num){if(num==s/lon)return true;int i;原创 2014-05-08 10:51:19 · 546 阅读 · 0 评论 -
字符串的全排列与组合
一、字符串的排列 问题描述:给出一个字符串,请设计一个函数输出所有可能的排列,如abc,可能的排列顺序有abc、acb、bac、bca、cba、cab 问题分析:要对长度为n的序列进行排序,可以转化为固定第一个的值,再对剩余的n-1个进行排序的问题,可以用递归实现。由于第一个的值可以是任何一个,可用第一个值与其他值依次交换实现。如序列abc可以转化为如下三种情况:原创 2014-10-28 16:15:44 · 1309 阅读 · 0 评论