算法与数据结构
再码亿行
这个作者很懒,什么都没留下…
展开
-
染色法判定二分图
#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int n, m;int h[N], e[N], ne[N], idx;int color[N];void add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++;}bool dfs(int u, int c){ color[u] = c;原创 2020-09-28 14:07:02 · 89 阅读 · 0 评论 -
二分图的最大匹配 (匈牙利算法)
时间复杂度(nm)#include<bits/stdc++.h>using namespace std;const int N = 510, M = 1e5 + 10;int n1, n2, m;int h[N], e[M], ne[M], idx;int match[N];bool st[N];void add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++;}bool find(int x原创 2020-09-28 11:40:28 · 173 阅读 · 0 评论 -
Kruskal算法求最小生成树
#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10, INF = 0x3f3f3f3f;int n, m;int p[N];struct Edge{ int a, b, w; bool operator< (const Edge &W)const { return w < W.w; }}edges[N];int fi原创 2020-09-27 18:15:37 · 81 阅读 · 0 评论 -
Prim算法求最小生成树
#include<bits/stdc++.h>using namespace std;const int N = 510, INF = 0x3f3f3f3f;int n, m;int g[N][N];int dist[N];bool st[N];int prim(){ memset(dist, 0x3f, sizeof dist); int res = 0; for(int i = 0; i < n; i ++) {原创 2020-09-27 17:05:45 · 93 阅读 · 0 评论 -
spfa求最短路
#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int n, m;int h[N], w[N], e[N], ne[N], idx;int dist[N];bool st[N];void add(int a, int b, int c){ e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;}int spfa(){原创 2020-09-13 20:07:31 · 86 阅读 · 0 评论 -
Bellman_ford算法,用于限制边数的最短路问题
#include<bits/stdc++.h>using namespace std;const int N = 1e4 + 10;int n, m, k;int dist[N], backup[N];struct Edge{ int a, b, w;}edges[N];int bellman_ford(){ memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0;原创 2020-09-09 09:50:17 · 86 阅读 · 0 评论 -
朴素dijkstra
#include<bits/stdc++.h>using namespace std;const int N = 510;int n, m;int g[N][N];int dist[N];bool st[N];int dijkstra(){ memset(dist, 0x3f, sizeof dist); dist[1] = 0; for(int i = 0; i < n - 1; i ++) { int t原创 2020-09-06 20:16:35 · 103 阅读 · 0 评论 -
归并排序
#include<bits/stdc++.h>using namespace std;void Merging(int *list1, int list1_size, int *list2, int list2_size){ int i, j, k; int temp[10]; i = j = k = 0; while(i < list1_size &am...原创 2020-02-09 12:40:57 · 83 阅读 · 0 评论 -
用链表实现一元多项式相加、相减
以下代码的功能为用不带头结点的单向链表实现两个一元多项式的相加、相减。涉及的内容有:建立链表、复制链表、链表排序、输出链表、依据两个多项式的系数和指数的关系,对两个多项式相加减、释放链表所占的空间。主要难点在于链表的排序和多项式相加减。#include <bits/stdc++.h>struct node{ float coefficient; //系数 int expo...原创 2019-10-24 09:51:34 · 1806 阅读 · 0 评论