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);
    }
}
相关推荐
心中有国也有家3 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事3 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
碧海银沙音频科技研究院3 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
csdn_aspnet4 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
LuminousCPP4 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
AI算法沐枫5 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
m0_629494737 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户7 小时前
用队列实现栈
数据结构·算法
做人求其滴7 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣