ACM
文章平均质量分 60
菜 菜 菜
henuyl
这个作者很懒,什么都没留下…
展开
-
最小生成树Kruskal算法
杨乐 2008283046水一波基础算法。。。。最小生成树Kruskal算法该算法涉及到了快速排序算法、并查集,通过快速排序,选择最短边,并查集筛选未相连的边,然后进行边的链接。快速排序快速排序算法通过多次比较和交换实现排序,大致流程如下:定义一个tmp作为基准数,通过该数把数组分成:比其大和比其小的左右两部分,该值的设定可以为随机值、最左边、最右边和中间,设情况而定。 将大于或等于基准数的数swap到数组右边,小于基准数的数swap到数组的左边。 则使用递归方法,左边和右边原创 2021-01-06 20:14:15 · 171 阅读 · 0 评论 -
使用DFS暴力解析数独
今天看到一道数独题,一向不爱数独的我当然不会自己去做了,于是写了一个dfs解答这些问题。首先要知道数独的规则,一个3 * 3的格子里不能有相同的数字,每一行每一列不能有相同的数字大概就是这样,emmmmmmmm那么,定义三个bool数组来控制不存在相同的数字;bool xFlag[10][10];bool yFlag[10][10];bool gridFlag[10][10];其中需要注意的是xFlag[i][j]表达的是,第i行,有没有jyFlag[i][j]表达的是,原创 2020-07-22 15:24:15 · 356 阅读 · 1 评论 -
矩阵中的路径-dfs求解
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 "a b c e s f c s a d e e" 的3 x 4的矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。AC之后看了好多人的代码,感觉很乱,这.原创 2020-07-17 15:20:34 · 383 阅读 · 0 评论 -
双队列实现从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
好久没写水题了,今天水一波。。。从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。TreeQ1 TreeQ2----------------------- -----------------------空 1----------------------- -----------------------刚开始把头结点放到TreeQ2中(Q2...原创 2020-07-16 17:46:14 · 552 阅读 · 1 评论 -
poj 1269 Intersecting Lines (基础数学几何 直线位置)
给你两条直线(前几次wa都理解成线段了),求 位置状况1.相离(如果是直线也就是平行)2.共线3.相交附上AC代码#include <stdio.h>#include <math.h>struct point{ double x , y;};struct line{ point l , r;}t1,t2;double xmul(p...原创 2018-07-27 17:07:09 · 134 阅读 · 0 评论 -
叉乘: 点和直线关系
下面代码块中wj 为玩具gb为隔板经过叉乘 当x1*y2 < x2*y1时,在隔板右边否则在隔板左边关于叉乘:叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:若 P × Q > 0 , 则P在Q的顺时针方向。若 P × Q < 0 , 则P在Q的逆时针方向。若P × Q = 0 , 则P与Q共线,但可能同向也可能反向。...原创 2018-07-27 13:46:35 · 2246 阅读 · 0 评论 -
POJ - 2635 The Embarrassed Cryptographer 同余模运算+十进制转化为千进制!
给定一个大数K,K是两个大素数的乘积的值。再给定一个int内的数L问这两个大素数中最小的一个是否小于L,如果小于则输出这个素数。用同余模运算+十进制转化为千进制!我wa和T了14次,因为打表打的太多了,超时了。。我的具体做法是假如123456和1234567千进制数组表示方法分别是[0][123][456][1][234][567]#include原创 2017-11-02 14:02:23 · 205 阅读 · 0 评论 -
快速查找素数 nyoj 187 筛选法求素数
这道题真的是太调皮了第一遍T了同样的代码提交了第二遍,就A了很简单,不多说了本来想 滚动数组和二分查找优化一下,后来 A了就算了#include #define N 2000005int a[N];void isprime(){a[0]=1;a[1]=1;for(int i=2;iif(!a[i]){for(int j=i+i;ja[原创 2017-08-04 12:25:52 · 245 阅读 · 0 评论 -
扩展欧几里得 Romantic (HDU - 2669)
这个题,废话一大堆,不过,题意还是很鲜明的。如果你只是用扩展欧几里得,可能会wrong 好多次,我就是血淋淋的教训。需要加while(x x=x+b/r; y=y-a/r;}来找到最小的x,并且这个x为正数;#include #define ll long longll gcd(ll a,ll b){return b==0?a:gcd原创 2017-08-04 09:40:14 · 224 阅读 · 0 评论 -
Hoj 2010 GCD & LCM Inverse 欧几里得算法初探
题目:http://acm.hit.edu.cn/hoj/problem/view?id=2010题意就是已知两个数的最大公约数gcd和最小公倍数lcm求这两个数a, b。由欧几里德求算法可以知道,a/gcd * b/gcd = lcm/gcd,a/gcd ,b/gcd 互质;定义两个互质的数 x,y;可以推断 a/gcd * b/gcd = x原创 2017-08-04 08:59:36 · 276 阅读 · 0 评论 -
最大连续和(分治法初学)
#include #include using namespace std;int maxsum(int a[],int left,int right){int r,l;if(right-left==1) return a[left];int m=left+(right-left)/2;int maxs=max(maxsum(a,left,m),maxsum(a,m,r原创 2017-05-10 18:48:09 · 292 阅读 · 0 评论 -
迪杰斯特拉的自我理解代码
#include #define N 1005#define inf 1int dist[N],dis[N][N];int book[N];int u,v;int n,m;int t,t1,t2;void input(){for(int i=1;i{for(int j=1;j{if(i==j) dis[i][j]=0;else dis[i原创 2017-03-21 08:23:16 · 222 阅读 · 0 评论 -
Kruskal:快排+并查集
#include #include using namespace std;int father[15];struct edge{int u;int v;int data;}e[1005];int sum=0;int n,m;bool cmp(edge x,edge y){if(x.data>y.data) return 0;else r原创 2017-03-21 08:22:11 · 273 阅读 · 0 评论 -
涂色数岛:深搜
#include #define N 1005int tx,ty;int n,m;int a[N][N];int book[N][N];int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};void dfs(int x,int y,int color){for(int i=0;i{tx=x+next[i][0];t原创 2017-03-21 08:21:25 · 272 阅读 · 0 评论 -
二分查找(不仅仅只用于查找,也可用来枚举)
#include int a[]={1,22,56,77,89,156,189,564,1024,2015,4412};void mid_search(int left,int right,int digit){if(left>right){printf("Not find!\n");return;}int mid=left+(right-left)/2;if(a[mid]原创 2017-03-21 08:20:33 · 207 阅读 · 0 评论 -
链表,冒泡,并查集
昨天进行的一阵脑补,对链表有了新的认识,补上昨天的链表链表就像是,杂乱无章,但又有序号顺序的类似数组一样,但是比数组灵活,以下是我脑补的代码,和我自己写的代码:自己写的代码:#include#includestruct ac{ char name[20]; ac *next;};int main(){ ac *head,*b,*c;原创 2017-02-08 14:25:42 · 313 阅读 · 0 评论 -
小白初探---栈,队列,链表--从入门到放弃
抽象到队列上说,有队头,队尾,要想入队,只能从队尾加,出队,只能从队头走。//和栈一样,它常见的两种存储是顺序存储和链式存储。总之:队列,先进先出;栈,先进后出;链表。。。实在听不懂是干嘛的。。队列:队头 front;队长 size;弹出第一个 pop;进队 push;栈:栈顶 top;栈长 size;弹出 pop;原创 2017-02-08 14:22:21 · 370 阅读 · 0 评论 -
我的ACM艰辛之路,求罩
在寒假放假后,我们不屈不挠的ACM成员在学校留校学习了4天的数据结构,刚刚接触这个东西还是一脸懵逼的,什么栈啊,队列的,经过层层渗透,终于能领悟了那么一点点,感觉真的挺棒的,学校还把全校最好的苹果机房让我们使用,加油!!!!我们都是最棒的!原创 2017-02-08 14:20:06 · 222 阅读 · 0 评论 -
怎么使用筛选法求素数
F神讲了2遍才弄懂的原创 2017-02-08 14:18:19 · 1035 阅读 · 0 评论 -
初探并查集原理
#include int father[1005];void get(){ for(int i=1;i1001;i++) { father[i]=i; }}int find(int x){ if(father[x]!=x) { father[x]=find(father[x]);原创 2017-02-09 11:13:32 · 207 阅读 · 0 评论 -
快速排序代码,亲自写的
手写快排才是最骄傲的原创 2017-02-09 15:18:16 · 396 阅读 · 1 评论 -
深搜的代码
#include #define N 10005int book[N];int a[N];int n;void dfs(int step){ if(step==n+1)//当你放到第n+1的位置上时(实际上没有这个位置),手中已经没有数字了 { for(int i=1;in;i++) { pr原创 2017-02-11 09:29:38 · 1196 阅读 · 0 评论 -
吐步骤的走迷宫
#includeint tx,ty;int map[5][5],flag[5][5];int next[4][2]={0,1,1,0,0,-1,-1,0};struct arr{ int x,y;}ac[100];int step=0;void back(int step){ if(step!=-1) { back原创 2017-02-14 09:13:25 · 256 阅读 · 0 评论 -
走迷宫记录所走最短路径的步数(最容易理解的)
这是一种比较好的思想原创 2017-02-14 10:05:29 · 1426 阅读 · 0 评论 -
Floyd的代码
#include int a[15][15];int inf=1int n,m;int d,t1,t2;void input(){for(int i=1;i{for(int j=1;j{if(i==j) a[i][j]=0;else a[i][j]=inf;}}for(int i=1;i{scanf("%d %d %d",&t原创 2017-03-21 08:18:39 · 504 阅读 · 0 评论 -
炸弹人:深搜
#include int sum;int mx,my;char a[1005][1005];int getnum(int x,int y){sum=0;int i,j;i=x;j=y;while(a[i][j]!='#'){if(a[i][j]=='G') sum++;i--;}i=x;j=y;while(a[i][j]!='#'){原创 2017-03-21 08:19:24 · 295 阅读 · 0 评论 -
简单快速排序详解
快速排序:假设有n个数 à大 ß小例如:3 4 1 8 2 i j设一个基准数temp=a[0];i从a[0]开始,j从a[n-1]开始;从j先向左移动,只要找到比temp小的数,就停下;然后i向右移动,只要遇到比temp大的数,就停下;就交换a[i]和a[j]的位置;3 2原创 2017-02-08 14:28:01 · 264 阅读 · 0 评论