day52 图论part4

文章目录

  • [卡码网 110. 字符串迁移](#卡码网 110. 字符串迁移)
  • [卡码网 105. 有向图的完全联通](#卡码网 105. 有向图的完全联通)
  • [卡码网 106. 海岸线计算](#卡码网 106. 海岸线计算)

卡码网 110. 字符串迁移

注意如何连接连个字符串,然后使用bfs找到一条最短路径。

java 复制代码
import java.util.*;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String beginStr = sc.next();
        String endStr = sc.next();
        Queue<String> q = new LinkedList<>();
        q.add(beginStr);
        sc.nextLine();
        Set<String> strset = new HashSet<>();
        Map<String, Integer> strmap = new HashMap<>();
        strmap.put(beginStr, 1);
        for (int i = 0; i < n; i++) {
            strset.add(sc.next());
        }
        while(!q.isEmpty()) {
            String word = q.poll();
            for (int i = 0; i < word.length(); i++) {
                char[] newword = word.toCharArray();
                for (char j = 'a'; j <= 'z'; j++) {
                    newword[i] = j;
                    String newString = new String(newword);
                    if (newString.equals(endStr)) {
                        System.out.println(strmap.get(word) + 1);
                        return;
                    }
                    if (strset.contains(newString) && !strmap.containsKey(newString)) {

                        strmap.put(newString, strmap.get(word) + 1);
                        q.add(newString);
                    }
                }
            }
        }
        System.out.println(0);

    }
}

卡码网 105. 有向图的完全联通

使用dfs遍历整个图,遍历到的点使用boolean数组标记。

java 复制代码
import java.util.*;

class Main{

    public static void dfs(List<List<Integer>> graph, int node, boolean[] visited) {
        if (visited[node] == true) {
            return;
        }
        visited[node] = true;
        List<Integer> nodes = graph.get(node);
        for (int nextnode : nodes) {
            dfs(graph, nextnode, visited);
        }
    }
    public static void main(String[] agrs) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        List<List<Integer>> graph = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            graph.add(new ArrayList<>());
        }
        for (int i = 0; i < k; i++) {
            int s = sc.nextInt();
            int t = sc.nextInt();
            graph.get(s).add(t);
        }
        boolean[] visited = new boolean[n + 1];
        dfs(graph, 1, visited);
        for (int i = 1; i <= n; i++) {
            if (visited[i] == false) {
            System.out.println(-1);
            return;
        }
        }
        System.out.println(1);
    }
}

卡码网 106. 海岸线计算

检查每一个陆地块的周围是否是边缘或者是水,是的话周长就加1。

java 复制代码
import java.util.*;

class Main {
    static int count;
    static int[][] dir = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
    public static void helper(int[][] graph, int x, int y) {
        for (int i = 0; i < 4; i++) {
            int nextx = x + dir[i][0];
            int nexty = y + dir[i][1];
            if (nextx < 0 || nexty < 0 || nextx >= graph.length || nexty >= graph[0].length || graph[nextx][nexty] == 0) {
                count++;
            }
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[][] graph = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                graph[i][j] = sc.nextInt();
            }
        } 
        int res = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                count = 0;
                if (graph[i][j] == 1) {
                    helper(graph, i, j);
                    res += count;
                }
            }
        }
        System.out.println(res);
    }
}
相关推荐
To_OC3 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎4 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC4 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn5 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹5 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术6 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
延凡科技8 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
CV-Climber8 小时前
检索技术的实际应用
人工智能·算法
hhzz9 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型