
算法与数据结构
给出《算法与数据结构》书中的java版解答
小乖乖的臭坏坏
研一在读
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并查集——入门学习(java代码实现)
UnionSet.javaimport java.util.Vector;public class UnionSet { Vector<Integer> rank = new Vector<>(); Vector<Integer> p = new Vector<>(); public UnionSet(int size) { rank.setSize(size); p.setSize(size).原创 2022-03-01 19:38:03 · 517 阅读 · 0 评论 -
线段树——入门学习(java代码实现)
SegmentTree.javapublic class SegmentTree { int[] arr, tree; public SegmentTree(int[] arr, int[] tree) { this.arr = arr; this.tree = tree; build_tree(0, 0, arr.length-1); } public void build_tree(int node, int sta.原创 2022-03-01 19:32:50 · 387 阅读 · 0 评论 -
字典树——入门学习(java代码实现)
Trie.javapublic class Trie { class TrieNode{ boolean isWord = false; TrieNode[] children; // HashMap<Character, TrieNode> children public TrieNode() { children = new TrieNode[26]; } } TrieNod原创 2022-02-25 20:30:08 · 225 阅读 · 0 评论 -
精进DFS和BFS,按照流程来,秒杀
DFS,BFS市面上都有很多的代码和视频,很多写的不明就里。其实一个是(基于栈的)递归,一个是队列的遍历。可以参照以下流程。顺一遍下来,就可以解决各种问题了。例题1:DFS遍历代码:import java.util.Scanner;import java.util.Stack;public class reWriteDFS { public static int time = 0; public static void main(String[] args) {原创 2022-02-23 16:11:43 · 242 阅读 · 0 评论 -
《算法入门经典(紫书)》第7章暴力求解法——子集生成(位向量法)
代码:public class Subset { public static void main(String[] args) { int[] A = {1,2,3,4,5}; int[] B = new int[A.length]; print_subset2(A.length, A, B, 0); } public static void print_subset2(int n, int[] A, int[..原创 2022-02-16 14:58:31 · 332 阅读 · 0 评论 -
《算法入门经典(紫书)》第7章暴力求解法——枚举排列
代码:public class EnumerationArrangement { public static void main(String[] args) { int[] A = {1,2,3,4,5}; print_repermutation(A.length, A, 0); } public static void print_permutation(int n, int[] A, int cur){ if(cur ==..原创 2022-02-16 11:09:36 · 312 阅读 · 0 评论 -
《算法入门经典(紫书)》第7章暴力求解法——简单枚举
例题1:代码:public class uva725 { public static void main(String[] args) { int n = 62; for (int a=12345;a<=98765;a++){ if(a%n!=0){ continue; } else { int b = a / n;原创 2022-02-16 10:30:59 · 392 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——12.3深度优先搜索的JAVA实现
题目:讲解:我的思路(写的很乱哈哈哈):/** 心得:如果以后涉及到多步相同的操作,直接写成一个函数,否则很容易遗漏其中的条件,从而出现问题。在本例中,压栈、color数组的赋值、时间增加、时间记录数组的更新就发生过多次的遗漏导致的bug。*/import java.util.Scanner;import java.util.Stack;public class DepthFirstSearch { public static void main(String[] a原创 2021-12-02 17:08:38 · 816 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——7.7最小成本排序的JAVA实现
题目&思路:代码:import java.util.*;public class MinimumCostSort { public static final int MAX = 1000; public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int A[] = new i原创 2022-01-13 11:14:05 · 346 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现
题目&思路:代码:import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class ShellSort { public static long cnt; public static int A[] = new int[1000000]; public static int n; public static ArrayList<Int原创 2022-01-12 17:34:25 · 230 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现
题目&解题思路:代码:import java.io.PushbackInputStream;import java.util.*;public class Puzzle_9 { public static final int N = 3; public static final int N2 = 9; public static final int dx[] = {-1, 0, 1, 0}; public static final int dy[]原创 2022-01-11 17:04:43 · 671 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——19.1八皇后问题的JAVA实现
题目&思路:对每一行的每一列进行放置皇后的操作,如果满足要求则放置皇后,更新限制数组,放置后对下一行进行放置皇后的操作,不断回溯。如果产生冲突,则对这一行的下一列进行操作,由于问题总是有解的,故总能搜索到答案。代码:import java.util.Scanner;public class Puzzle { public static final int FREE = -1; public static final int NOT_FREE = 1; publ原创 2022-01-08 14:14:04 · 563 阅读 · 1 评论 -
挑战程序设计竞赛(算法和数据结构)——17.5最大长方形的JAVA实现
题目&思路:代码:import java.util.Scanner;import java.util.Stack;public class LargestRectangle { static class Rectangle{//定义一个矩形类 public int pos, height; Rectangle(){} Rectangle(int pos, int height){ this.pos = p原创 2022-01-07 14:55:47 · 325 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——17.4最大正方形的JAVA实现
题目&思路:代码:import java.util.Scanner;public class LargestSquare { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int H = cin.nextInt(); int W = cin.nextInt(); int map[][] = new int[原创 2022-01-06 09:08:16 · 447 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——17.3最长递增子序列的JAVA实现
题目&思路:代码:import java.util.Scanner;public class LongestIncreasingSubsequence { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int A[] = new int[n+1]; int原创 2022-01-05 13:06:57 · 460 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——17.2 01背包问题(动态规划)的JAVA实现
题目&思路:代码:import java.util.ArrayList;import java.util.Scanner;public class KnapsackProblem { public static void main(String[] args) { class Item{ public int value, weight; Item(){} Item(int value, i原创 2022-01-04 16:05:13 · 317 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现
问题&思路:代码:import java.util.Scanner;public class CoinChanging { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int m = cin.nextInt(); int C[] = new int[m];原创 2022-01-04 09:34:29 · 326 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现
题目和思路:代码:import java.util.Collections;import java.util.Comparator;import java.util.Scanner;import java.util.Vector;public class MinimumSpanningTree { public static void main(String[] args) { Scanner cin = new Scanner(System.in);原创 2022-01-03 16:53:22 · 152 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——15.4树的直径的JAVA实现
题目&思路:代码:import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Scanner;public class TreeDiameter { static class Edge{ public int t, w; Edge(){} Edge(int t, int w){ this.t = t;原创 2021-12-30 11:31:16 · 406 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——15.3 关节点的JAVA实现
题目:代码:import java.util.ArrayList;import java.util.HashSet;import java.util.Scanner;import java.util.Set;public class ArticulationPoint { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int N = ci原创 2021-12-30 10:22:15 · 238 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——15.2拓扑排序(dfs,bfs)的JAVA实现
题目:代码:import java.util.*;public class TopologicalSort { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int N = cin.nextInt(); boolean V[] = new boolean[N]; for (int i=0;i<N;i++){原创 2021-12-29 12:14:36 · 532 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——15.1所有点对间的最短路径(Floyd算法)的JAVA实现
题目与思路:代码:import java.util.Scanner;public class FloydAlgorithm { public static void main(String[] args) { //定义距离矩阵 int d[][] = new int[100][100]; for (int i=0;i<100;i++){ for (int j=0;j<100;j++){原创 2021-12-28 15:09:03 · 346 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——14.1互质的集合(并查集)的JAVA实现
题目与思路:代码:import java.util.Scanner;import java.util.Vector;public class DisjointSet { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int q = cin.nextInt();原创 2021-12-24 15:01:08 · 562 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——16.13线段相交问题(曼哈顿算法)的JAVA实现
题目与思路:代码:import java.util.*;public class ManhattanGeometry { public static class EpElement{ private GraghBasic.Point P; private String direction;//left, right, bottom, top private int id; EpElement(){} E原创 2021-12-23 12:32:26 · 565 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——16.12凸包(安德鲁算法)的JAVA实现
题目与思路:代码:import java.util.*;//数据结果套数据结构时,需要一层一层初始化public class ConvexHull { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); Vector<GraghBasic.Point> S = new Vect原创 2021-12-23 12:25:35 · 437 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——16.11点的内包的JAVA实现
题目与思路:代码:import java.util.Scanner;import java.util.Vector;public class PolygonPointContainment { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int g = cin.nextInt(); Vector<GraghBasic.P原创 2021-12-23 12:19:39 · 286 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——16.1 几何对象的基本元素与表现的JAVA实现
import java.awt.*;import java.util.Vector;public class GraghBasic { //表示点的类 public static class Point{ double x, y; Point(double x, double y){ this.x = x; this.y = y; } } //表示向量的类 publ原创 2021-12-23 12:10:38 · 316 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——13.3单源最短路径(dijkstra算法)的JAVA实现
题目:代码:import java.io.BufferedInputStream;import java.io.BufferedReader;import java.util.Scanner;public class SingleSourceShortestPath { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.i原创 2021-12-09 14:40:17 · 520 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——13.2最小生成树(prim算法)的JAVA实现
题目与讲解思路:代码:import java.io.BufferedInputStream;import java.util.Scanner;public class MinimumSpanningTree { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n = cin.nextI原创 2021-12-09 11:39:58 · 1022 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——13.1基于加权图的两类问题的描述
最小生成树树是没有环的图。在树中,任意顶点rrr和vvv之间必然存在着1条路径。图G=(V,E)G=(V,E)G=(V,E)的生成树G=(V′,E′)G=(V',E')G=(V′,E′)是图GGG的子图,它拥有图GGG所有的顶点V(V=V′)V(V=V')V(V=V′),且保证自身为树的前提下拥有尽可能多的边。图的生成树可通过深度优先搜索和广度优先搜索得到,且结果不唯一。最小生成树是指各边权值总和最小的生成树。最短路径在加权图G=(V,E)G=(V,E)G=(V,E)中,求给定顶点sss,dd原创 2021-12-06 20:14:40 · 107 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——12.5连通分量的JAVA实现
题目:讲解:注意:定义了一个Vector类型的数组,不仅需要初始化Vector类型的数组,还需初始化每一个Vector类型的容器。否则会出现以下异常:Exception in thread “main” java.lang.NullPointerException: Cannot invoke “java.util.Vector.add(Object)” because “G[u]” is nullat ConnextedComponents.main(ConnextedComponent原创 2021-12-06 17:54:05 · 353 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——12.4广度优先搜索的JAVA实现
题目:代码:import java.util.*;public class BreadthFirstSearch { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); //建立图的邻接矩阵 int M[][] = new int[n][n]; for原创 2021-12-03 11:44:19 · 995 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——12.2图的表示JAVA实现
题目:import java.util.Scanner;public class GraphImplement { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); //建立图的邻接矩阵 int M[][] = new int[n][n]; for(int i原创 2021-11-30 17:11:56 · 269 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——12.1图的基本概念
图的表述和术语顶点集合位V,边集合为E的图记作G=(V,E)G=(V,E)G=(V,E)。另外,G=(V,E)G=(V,E)G=(V,E)的顶点和- 边数分别为∣V∣\mid V\mid∣V∣和∣E∣\mid E\mid∣E∣。链接两个顶点uuu,vvv的边记作e=(u,v)e=(u,v)e=(u,v)。再无向图中,(u,v)(u,v)(u,v)和(v,u)(v,u)(v,u)代表同一条边。再加权图中,边(u,v)(u,v)(u,v)的权记作w(u,v)w(u,v)w(u,v)。起点和终点相同的路径原创 2021-11-30 16:45:51 · 691 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——11.4矩阵连乘法的JAVA实现
630 3535 151510 2020 25原创 2021-11-30 16:15:53 · 206 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——11.3最长公共子序列的JAVA实现
题目:讲解与思路:代码:import java.util.Scanner;public class LongestCommonSubsequence { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); /*next()或nextInt()与nextLine()方法联用而且用在nex原创 2021-11-27 19:26:03 · 422 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——10.5 Java 中对应C++ STL中的PriorityQueue类的使用
import java.util.Comparator;import java.util.Queue;import java.util.PriorityQueue;public class PriorityQueueDemo { public static void main(String[] args) { //默认是从小到大排序,这边需要对排序的方法进行重载,按照从大到小来排 Queue<Integer> PQ = new PriorityQue原创 2021-11-26 13:37:41 · 675 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——10.4优先队列的JAVA实现
题目:讲解:代码:import java.util.Scanner;public class PriorityQueue { public static void main(String[] args) { int MAX = 1000; int H = 0;//堆的长度 int[] A = new int[MAX+1]; while (true) { Scanner cin_string =原创 2021-11-26 12:14:16 · 291 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——10.3最大堆(最小堆)的JAVA实现
题目:这一小节的思路很好,仍然是使用了一个递归,值得注意的是,数组长度的一半这个值恰好是下标最大的非叶节点:代码如下:import java.util.Scanner;public class MaxHeap { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int[] A =原创 2021-11-26 10:52:06 · 218 阅读 · 0 评论 -
挑战程序设计竞赛(算法和数据结构)——10.2完全二叉树的JAVA实现
题目与思路:import java.io.BufferedInputStream;import java.util.Scanner;public class CompleteBinaryTree { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n = cin.nextInt();原创 2021-11-26 11:43:53 · 107 阅读 · 0 评论