随笔分类 - 算法入门经典第二版第六章 数据结构基础
摘要:直接贪心。先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了。每个结点在左在右其实都不影响,只和层数有关。现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现次数最多的保持不变。/****************************************...
阅读全文
摘要:只和连通分量以及度数有关。不同连通分量只要连一条边就够了,连通分量为0的时候要特判。一个连通分量只需看度数为奇的点的数量,两个端点(度数为奇)是必要的。如果多了,奇点数也一定是2的倍数(一条边增加两个度数,总度数是偶数),把多余的成对奇点连边,一定存在一条欧拉路径。并查集维护或者dfs都可以。/**...
阅读全文
摘要:模拟题。每个单元格有表达式就dfs,如果有环那么就不能解析,可能会重复访问到不能解析的单元格,丢set里或者数组判下重复。这种题首先框架要对,变量名不要取的太乱,细节比较多,知道的库函数越多越容易写。注意细节,注意格式。/***************************************...
阅读全文
摘要:读懂题意以后还很容易做的,和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易了。具体做法看代码#includeusing namespace std;const int maxn...
阅读全文
摘要:非常适合A*的一道题。比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。#include#include#includeusing namespace std;const int MAX = 21;int m,n,k;int C[MAX][MAX][MAX];int G[MAX][MAX];i...
阅读全文
摘要:根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决#include#includeconst int N = 30;char preOrder[N];char midOrder[N];char S[N];int top;void solve(char *pre,char *mid,i...
阅读全文
摘要:题意,给你一颗树的bfs序和dfs序,结点编号小的优先历遍,问你可能的一种树形;输出每个结点的子结点。注意到以下事实:(1)dfs序中一个结点的子树结点一定是连续的。(2)bfs,dfs序中的一个结点u的后续结点一定是u或u的后兄弟结点{v},或u和{v}的后代节点{s}。(3)如果有后兄弟结点,那...
阅读全文
摘要:InputEach input set consists of a sequence of 52 integers separated by spaces and/or ends of line. The integers represent card values of the initial d...
阅读全文
摘要:InputInput data to the program specifies the order in which cards are dealt from the pack. The input contains pairs of lines, each line containing 26 ...
阅读全文
摘要:input80000000000000000000011110000111100011111001111110011110000111000-89 14 17 22 23 44 63 69 88 94 113 -120000-40 -10outputImage 19 14 17 22 23 44 6...
阅读全文
摘要:以前对离散化的理解不够,所以把端点和区间区分来考虑但是做完这题以后有了新的认识:先来看一个问题:给你以下的网格,你需要多少空间去存储红点区间的信息呢?只需要图上所示的1,2,3,4个点就足够表示红点所在区间了,为什么不是一个区间的第一个红点和最后一个红点呢?(如果这样记录的话则必须加一区间点,记录区...
阅读全文
摘要:大体思路是从终点反向做一次BFS得到一个层次图,然后从起点开始依次向更小的层跑,跑的时候选则字典序最小的,由于可能有多个满足条件的点,所以要把这层满足条件的点保存起来,在跑下一层。跑完一层就会得到这层最小的color号。反省:这道题由于有自环和重边的存在,因此满足条件的一个点可能多次被加到队列,这样...
阅读全文
摘要:判断无向图是否存在欧拉回路,就是看度数为奇数的点有多少个,如果有两个,那么以那分别两个点为起点和终点,可以构造出一条欧拉回路,如果没有,就任意来,否则,欧拉回路不存在。首先用并查集判断连通,然后统计度数。#include#include#include//#include//#define loca...
阅读全文
摘要:第一个A*,纪念下。A*要保证最短路一定要估价函数小于等于实际值,越接近越好估价函数取Manhattan距离除以二。//Rey#include#include#include#includeusing namespace std;const int N = 8;bool C[N][N];struct...
阅读全文
摘要:借鉴了线段数区间操作的思想,只是把一个结点的孩子扩展到了4个,结点k,四个孩子编号分别为4*k+1,4*k+2,4*k+3,4*K+4,从零开始。根据层数,确定权值。#include#includeconst int maxn = 1365 + 5;//4^5 + 4^4 + ... + 1char...
阅读全文
摘要:非常有趣的一道题目,大意是给你六种符号的16进制文本,让你转化成二进制并识别出来代码实现上参考了//http://blog.csdn.net/u012139398/article/details/39533409#include#include #include #include #include ...
阅读全文
摘要:这题思路就普通的BFS加上一个维度朝向,主要是要注意输入,输出,以及细节的处理#include#include#include#includeusing namespace std;const int MAX = 9+1;const int DIR = 4;const int TURN = 3;bo...
阅读全文