代码随想三刷图论篇2
创始人
2025-01-10 12:38:02
0

代码随想三刷图论篇2

  • 104. 建造最大岛屿
    • 题目
    • 代码
  • 110. 字符串接龙
    • 题目
    • 代码
  • 105. 有向图的完全可达性
    • 题目
    • 代码
  • 106. 岛屿的周长
    • 题目
    • 代码

104. 建造最大岛屿

题目

链接

代码

import java.util.*; class Main{          public static void main(String[] args){         Scanner sc = new Scanner(System.in);         int N = sc.nextInt();//行         int M = sc.nextInt();//列         int[][] pic = new int[N][M];         used = new boolean[N][M];         for(int i =0;i             for(int j =0;j                 pic[i][j] = sc.nextInt();                 if(pic[i][j]==0){                     used[i][j] = true;                 }             }         }         int maxCount = 0;         int index = 1;         Map map = new HashMap();          for(int i =0;i             for(int j =0;j                 if(pic[i][j]==1){                     list.clear();                     dfs(pic,i,j);                     for(int k = 0;k                         int[] temp= list.get(k);                         pic[temp[0]][temp[1]] = index;                     }                     map.put(index,list.size());                     maxCount = Math.max(maxCount,list.size());                     index++;                 }             }         }         for(int i =0;i             for(int j =0;j                 if(pic[i][j]==0){                     Set sett = new HashSet();                     int count = 1;                     if(i>=1 && !sett.contains(pic[i-1][j])){                         count+=map.getOrDefault(pic[i-1][j],0);                         sett.add(pic[i-1][j]);                     }                     if(j>=1 && !sett.contains(pic[i][j-1])){                         count+=map.getOrDefault(pic[i][j-1],0);                         sett.add(pic[i][j-1]);                     }                     if(i                         count += map.getOrDefault(pic[i+1][j],0);                         sett.add(pic[i+1][j]);                     }                     if(j                         count+=map.getOrDefault(pic[i][j+1],0);                         sett.add(pic[i][j+1]);                     }                     maxCount = Math.max(maxCount,count);                 }             }         }         System.out.println(maxCount);              }     static boolean[][] used;     static List list = new ArrayList();     public static void dfs(int[][] pic,int i,int j){         if(i<0||j<0||i>=pic.length||j>=pic[0].length||used[i][j]){             return;         }         used[i][j] = true;         list.add(new int[]{i,j});         if(i>=1){             dfs(pic,i-1,j);         }         if(j>=1){             dfs(pic,i,j-1);         }         if(i             dfs(pic,i+1,j);         }         if(j             dfs(pic,i,j+1);         }     } } 

110. 字符串接龙

题目

链接

代码

import java.util.*;  class Main{     public static void main(String[] args){         Scanner sc = new Scanner(System.in);                  int N = Integer.valueOf(sc.nextLine());         String beginStr = sc.next();         String endStr = sc.next();         Set strList = new HashSet();         for(int i = 0;i             strList.add(sc.next());         }         int count = 0;         Deque  queue = new LinkedList();         queue.addLast(beginStr);         while(!queue.isEmpty()){             count++;             int size = queue.size();             for(int step = 0;step                 String word = queue.removeFirst();                 for(int i=0;i< word.length();i++){                                      char[] chars = word.toCharArray();                     for(char k = 'a';k<='z';k++){                         chars[i] = k;                            String newWord = String.valueOf(chars);                         if(newWord.equals(endStr)){                             System.out.println(count+1);                             return;                         }                         if(strList.contains(newWord)){                             strList.remove(newWord);                             queue.addLast(newWord);                         }                     }                 }             }         }                  System.out.println(0);     } } 

105. 有向图的完全可达性

题目

链接

代码

import java.util.*;  class Main{          public static void main(String[] args){         Scanner sc = new Scanner(System.in);         int N = sc.nextInt();         int K = sc.nextInt();         Map> map = new HashMap();         for(int i =1;i<=N;i++){             map.put(i,new HashSet());         }         for(int i = 0;i             int num1 = sc.nextInt();             int num2 = sc.nextInt();             map.get(num1).add(num2);         }         used = new boolean[N+1];         dfs(map,1);         for(int i =1;i<=N;i++){             if(!used[i]){                 System.out.println(-1);                 return;             }         }         System.out.println(1);     }     static boolean[] used;     public static void dfs(Map> map,int key){         if(used[key]){             return;         }         used[key] = true;         Set set =map.get(key);         for(int nextNum:set){             dfs(map,nextNum);         }     } } 

106. 岛屿的周长

题目

链接

代码

import java.util.*;  class Main{     public static void main(String[] args){         Scanner sc = new Scanner(System.in);         int N = sc.nextInt();         int M = sc.nextInt();                  int[][] pic = new int[N][M];         for(int i=0;i             for(int j=0;j                 pic[i][j] = sc.nextInt();             }         }                  int sum = 0;    // 陆地数量         int cover = 0;  // 相邻数量         for (int i = 0; i < N; i++) {             for (int j = 0; j < M; j++) {                 if (pic[i][j] == 1) {                     sum++; // 统计总的陆地数量                     // 统计上边相邻陆地                     if(i - 1 >= 0 && pic[i - 1][j] == 1) cover++;                     // 统计左边相邻陆地                     if(j - 1 >= 0 && pic[i][j - 1] == 1) cover++;                     // 为什么没统计下边和右边? 因为避免重复计算                 }             }         }         System.out.println(sum * 4 - cover * 2 );     } } 

相关内容

热门资讯

科技新动态!开心跑得快有辅助工... 科技新动态!开心跑得快有辅助工具吗(透明挂)外挂透明挂辅助神器(2021已更新)(哔哩哔哩)1)开心...
4分钟实锤!吉祥麻将,微扑克切... 4分钟实锤!吉祥麻将,微扑克切实是真的有挂,介绍教程(有挂揭秘);一、吉祥麻将AI软件牌型概率发牌机...
实测发现!鄂州晃晃外 挂(透视... 实测发现!鄂州晃晃外 挂(透视)透视辅助工具(2021已更新)(哔哩哔哩)1、鄂州晃晃外 挂系统规律...
三分钟了解!好彩麻将怎样才可以... 三分钟了解!好彩麻将怎样才可以拿好牌(透视辅助)外挂透明挂辅助机制(2020已更新)(哔哩哔哩)1、...
九分钟辅助!斗棋辅助器在哪,w... 九分钟辅助!斗棋辅助器在哪,wepoker本来真的是有挂,教你攻略(有挂教程)1、下载好斗棋辅助器在...
记者揭秘!!广东雀神麻雀辅助器... 记者揭秘!!广东雀神麻雀辅助器在哪里下载(透视)透视辅助app(2020已更新)(哔哩哔哩)1、很好...
终于清楚!皮皮跑胡子输赢规律(... 终于清楚!皮皮跑胡子输赢规律(辅助挂)外挂透明挂辅助机制(2026已更新)(哔哩哔哩)1)皮皮跑胡子...
二分钟科普!花城牌舍系统规律,... 二分钟科普!花城牌舍系统规律,aAPOKER竟然存在有挂,揭秘教程(有挂插件)进入游戏-大厅左侧-新...
一分钟教你!心悦手机麻将辅牌器... 一分钟教你!心悦手机麻将辅牌器(透视辅助)外挂透视辅助挂(2024已更新)(哔哩哔哩)1、每一步都需...
科技新动态!四方河南麻将赢牌技... 科技新动态!四方河南麻将赢牌技巧(透视)外挂透明挂辅助神器(2026已更新)(哔哩哔哩)1、每一步都...