算法竞赛入门经典
文章平均质量分 64
biluyang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Cantor的数表
题目描述如下数列,前5项分别是1/1,1/2,2/1,3/1,2/2……。输入n,输出第n项。1/1 1/2 1/3 1/4 1/52/1 2/2 2/3 2/43/1 3/2 3/34/1 4/25/1样例输入314712345样例输出2/12/原创 2015-02-04 13:12:12 · 421 阅读 · 0 评论 -
小球下落
有一棵二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,...,2^D-1。在结点1处放一个小球,它会往下落。每个内结点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,它的状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否者往右走,直到走到叶子结点。一些小球从结点1处依次开始下落,最后一个小球将会落到哪里呢?输入叶子深度原创 2015-02-06 13:48:39 · 471 阅读 · 0 评论 -
走迷宫
问题描述:一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地要么是障碍物。任务是找一条从起点到终点的最短移动序列,其中UDLR分别表示上、下、左、右移动到相邻单元格。任何时候都不能在障碍格中,也不能走到迷宫之外。起点和终点保证是空地。n,m分析:可以通过BFS来按照到起点的距离顺序遍历迷宫图。然后在遍历出最短的路径序列。#include#include#include#原创 2015-02-08 16:40:00 · 956 阅读 · 0 评论 -
层次遍历
问题描述:输入一棵二叉树,你的任务是按从上到下、从左到右的顺序输入各个结点的值。每个结点都按照从根结点到它的移动序列给出(L表示左,R表示右)。再输入中,每个结点的左括号和右括号之间没有空格,相邻结点之间用一个空格隔开。每棵树的输入用一对空括号()结束。样例输入:(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,R原创 2015-02-08 15:14:55 · 649 阅读 · 0 评论 -
二叉树重建
二叉树递归定义它的先序遍历、中序遍历和后序遍历如下:PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树) InOrder(T)=InOrder(T的左子树)+T的根节点+InOrder(T的右子树) PostOrder(T)=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根节点 问题描述:输入一颗二叉树的先原创 2015-02-08 14:49:36 · 410 阅读 · 0 评论 -
困难的串
问题描述:如果一个字符串包含两个相邻的重复的子串,则称它是“容易的串”,其他串称为“困难的串”。例如,BB、ABCDACABCAB、ABCDABCD都是容易的,而D、DC、ABDAB、CBABCBA都是困难的。输入正整数n和L,输出由前L个字符组成的、字典序第k小的困难的串。样例输入:7 330 3样例输出:ABACABAABACABCACBABCABACABCACBACA原创 2015-02-16 17:51:59 · 705 阅读 · 0 评论 -
八数码问题
问题描述:编号为1~8的8个正方形滑块被摆成3行3列(有一个格子留空),每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中,而它原来的位置就成为了新的空格。给定初始局面和目标局面(用0表示空格),计算出最少的移动步数。如果无法到达目标局面,则输出-1。#include#include#include#include#includeusing namespace std;原创 2015-02-16 23:28:00 · 629 阅读 · 0 评论 -
八皇后问题
问题描述:在棋盘上放置8个皇后,使得她们互不攻击,此时每个皇后的攻击范围为同行同列和同对角线,要求找出所有解。分析:经思考,恰好每行每列各放置一个皇后。如果用C[x]表示第x行皇后的列编号,则问题变成了全排列生成问题。0~7的排列一共只有8!=40320个,枚举量不会超过它。下面程序简洁地求解八皇后问题。在主程序中读入n,并为tot清0,然后调用search(0),即可得到解的个数tot。原创 2015-02-15 13:40:36 · 616 阅读 · 0 评论 -
素数环
问题描述:输入正整数n,把整数1,2,3,...,n组成的一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n样例输入:6样例输出:1 4 3 2 5 61 6 5 2 3 4#include#include#include#includeint vis[100], A[100], isp[100];int n;原创 2015-02-15 20:25:31 · 552 阅读 · 0 评论 -
生成可重集的排列
输入数组p,并按字典序输出数组A各元素的所有全排列。#include#include#includevoid print_permutation(int n,int *p,int *A,int cur){ int i, j; if(cur == n) { for(i = 0; i < n; i++) printf("%d ",A[i]);原创 2015-02-11 19:20:58 · 511 阅读 · 0 评论 -
子集生成
第一种方法:增量构造法,一次选出一个元素放到集合中,程序如下:#include#include#includevoid print_subset(int n,int *A,int cur){ for(int i = 0; i <cur; i++) printf("%d ",A[i]); printf("\n"); int s = cur ? A[cur原创 2015-02-14 16:23:45 · 392 阅读 · 0 评论
分享