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);
    }
}
相关推荐
Mrlxl.cn10 小时前
计算机网络——网络层
c语言·数据结构·计算机网络·考研
d111111111d11 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜11 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Jiangxl~12 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢13 小时前
wolfram详解山峦算法
前端·算法
counting money13 小时前
prim算法最小生成树(java)
算法
澈20713 小时前
C++面向对象:类与对象核心解析
c++·算法
用户6906738819213 小时前
基于无人机的单目测距系统,平均误差仅2.12%
算法
dinl_vin13 小时前
LangChain 系列·(四):RAG 基础——给大模型装上“外脑“
人工智能·算法·langchain
码完就睡14 小时前
数据结构——哈希表原理与C语言实现总结
数据结构·散列表