感谢完美

终于ak了一次
#完美世界#
全部评论
第二题:迪杰斯特拉算法,在创建图的时候卡了挺久的。。 import java.util.*; class Edge implements Comparable<Edge> {     public int weight;     public Node from;     public Node to;     public Edge(int weight, Node from, Node to) {         this.weight = weight;         this.from = from;         this.to = to;     }     @Override     public int compareTo(Edge o) {         return this.weight - o.weight;     }     @Override     public String toString() {         return "Edge{" +                 "weight=" + weight +                 ", from=" + from +                 ", to=" + to +                 '}';     } } class Graph {     public HashMap<Integer, Node> nodes;     public HashSet<Edge> edges;     public Graph() {         nodes = new HashMap<>();         edges = new HashSet<>();     } } class Node {     public int value;     public int in;     public int out;     public ArrayList<Node> nexts;     public ArrayList<Edge> edges;     public Node(int value) {         this.value = value;         in = 0;         out = 0;         nexts = new ArrayList<>();         edges = new ArrayList<>();     }     @Override     public String toString() {         return "Node{" +                 "value=" + value +                 '}';     } } public class Main1 {     //记录距离树最近边edges对应的权值     static private HashMap<Node, Integer> powers;     //记录横切边     static private PriorityQueue<Edge> pq;     //记录顶点     static private Node origin;     static private Graph graph;     public static void init(Integer[][] matrix, int p, int n) {         graph = createGraph(matrix);         origin = graph.nodes.get(p);         powers = new HashMap<>(n);         pq = new PriorityQueue<>(n);         for (int i = 0; i < n; i++) {             powers.put(graph.nodes.get(i), Integer.MAX_VALUE);         }         find();     }     private static void find() {         //从起点开始         powers.put(origin, 0);         pq.offer(new Edge(-1, origin, origin));         relax(origin);         //不断放松权值最小的边         while (!pq.isEmpty()) {             Edge min = pq.poll();             relax(min.to);         }     }     //对顶点的所有邻接边检查,松弛权值比较大的顶点,修正无效边     private static void relax(Node from) {         for (Edge edge : from.edges) {             Node to = edge.to;             int newPower = powers.get(from) + edge.weight;             //经过顶点from的边的路径权值比原来更小,把to的边的起点修改为from,把到to的权值修改为更小的             if (powers.get(to) > newPower) {                 powers.put(to, newPower);                 if (pq.contains(edge))                     pq.remove(edge);                 edge.weight = newPower;                 pq.offer(edge);             }         }     }     //获取到某一顶点的权值     public static int getPower(int vertex) {         Node node = graph.nodes.get(vertex);         return powers.get(node);     }     public static Graph createGraph(Integer[][] matrix) {         Graph graph = new Graph();         for (int i = 0; i < matrix.length; i++) {             for (int j = 0; j < matrix[0].length; j++) {                 if (matrix[i][j] == -1)                     continue;                 Integer from = i;                 Integer to = j;                 if (!graph.nodes.containsKey(from)) {                     graph.nodes.put(from, new Node(from));                 }                 if (!graph.nodes.containsKey(to)) {                     graph.nodes.put(to, new Node(to));                 }                 Node fromNode = graph.nodes.get(from);                 Node toNode = graph.nodes.get(to);                 Edge newEdge = new Edge(matrix[i][j], fromNode, toNode);                 fromNode.nexts.add(toNode);                 fromNode.out++;                 toNode.in++;                 fromNode.edges.add(newEdge);                 graph.edges.add(newEdge);             }         }         return graph;     }     public static void main(String[] args) { //        Integer[][] matrix = { //                {-1, 1, 4, -1, -1, -1}, //                {1, -1, 2, 7, 5, -1}, //                {4, 2, -1, -1, 1, -1}, //                {-1, 7, -1, -1, 3, 2}, //                {-1, 5, 1, 3, -1, 6}, //                {-1, -1, -1, 2, 6, -1} //        }; //        init(matrix,0,6); //        for (int i = 0; i < 6; i++) { //            if (i == 0) //                continue; //            System.out.print(getPower(i)); //            if(i != 6 - 1) //                System.out.print(","); //        }         Scanner scanner = new Scanner(System.in);         while (scanner.hasNext()) {             int n = scanner.nextInt();             int p = scanner.nextInt();             Integer[][] matrix = new Integer[n][n];             for (int i = 0; i < n; i++) {                 for (int j = 0; j < n; j++) {                     matrix[i][j] = scanner.nextInt();                 }             }             init(matrix, p, n);             for (int i = 0; i < n; i++) {                 if (i == p)                     continue;                 System.out.print(getPower(i)+",");             }             System.out.println();         }     } }
点赞 回复 分享
发布于 2019-08-23 20:13
辞职的就是不一样😀tql
点赞 回复 分享
发布于 2019-08-23 23:38
第一题:新建两个栈用来保存最小最大值就可以啦 package test.wangmei; import java.util.Scanner; import java.util.Stack; class MyStack{     private Stack<Integer> stack;     private Stack<Integer> minStack;     private Stack<Integer> maxStack;     public MyStack() {         stack = new Stack<>();         minStack = new Stack<>();         maxStack = new Stack<>();     }     public void push(int num) {         stack.push(num);         if (minStack.isEmpty() || minStack.peek() >= num)             minStack.push(num);         if (maxStack.isEmpty() || maxStack.peek() <= num)             maxStack.push(num);     }     public int peek() {         return stack.peek();     }     public int pop() {         int num = stack.pop();         if (!minStack.isEmpty() && minStack.peek() == num)             minStack.pop();         if (!maxStack.isEmpty() && maxStack.peek() == num)             maxStack.pop();         return num;     }     public int min() {         return minStack.peek();     }     public int max() {         return maxStack.peek();     } } public class Main {     public static void main(String[] args) {         MyStack stack ;         Scanner scanner = new Scanner(System.in);         while (scanner.hasNext()){             stack = new test.wangmei.MyStack();             int n = scanner.nextInt();             for (int i = 0; i < n; i++) {                 stack.push(scanner.nextInt());             }             System.out.println(stack.max()+","+stack.min());         }     } }
点赞 回复 分享
发布于 2019-08-23 20:12
楼主两道题的答案能贴一下吗🤣
点赞 回复 分享
发布于 2019-08-23 20:07
楼主求第一题答案
点赞 回复 分享
发布于 2019-08-23 20:03
感谢楼主!
点赞 回复 分享
发布于 2019-08-23 20:02
楼主,能发下代码学习一下么,第一题百分之60很难受,第二题我就扫了眼,不会写,就放弃了
点赞 回复 分享
发布于 2019-08-23 20:01
第一题是漂流船吗?
点赞 回复 分享
发布于 2019-08-23 20:00
早知道不提前交了😂
点赞 回复 分享
发布于 2019-08-23 19:56
哪套试卷?
点赞 回复 分享
发布于 2019-08-23 19:56
可以分享一下第二题的代码吗?😂
点赞 回复 分享
发布于 2019-08-23 19:40

相关推荐

迷茫的大四🐶:哇靠,哥们,啥认证啊,副总裁实习,这么有实力嘛
一起聊美团
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
3795次浏览 27人参与
# 你觉得mentor喜欢什么样的实习生 #
10187次浏览 283人参与
# 平安产险科技校招 #
2400次浏览 0人参与
# 帮我看看,领导说这话什么意思? #
6032次浏览 25人参与
# 没有家庭托举的我是怎么找工作的 #
12230次浏览 156人参与
# 怎么给家人解释你的工作? #
1337次浏览 16人参与
# 智慧芽求职进展汇总 #
17684次浏览 106人参与
# 求职低谷期你是怎么度过的 #
5169次浏览 91人参与
# 26届秋招公司红黑榜 #
11674次浏览 40人参与
# 从哪些方向判断这个offer值不值得去? #
6497次浏览 91人参与
# 同bg的你秋招战况如何? #
158806次浏览 927人参与
# 度小满求职进展汇总 #
10058次浏览 49人参与
# 实习必须要去大厂吗? #
146606次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4431次浏览 20人参与
# 你有哪些缓解焦虑的方法? #
37172次浏览 835人参与
# 面试紧张时你会有什么表现? #
1687次浏览 20人参与
# 你喜欢工作还是上学 #
77566次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85471次浏览 467人参与
# 秋招想进国企该如何准备 #
97703次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103577次浏览 819人参与
# 机械人的工作环境真的很差吗 #
24999次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28125次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务