DAY53-图论BFS

kama110.字符串接龙

java 复制代码
	/**
	 * 遍历每个字母和每个位置替换
	 * @param args
	 */
	public static void main(String[] args) {
		//读取
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		scan.nextLine();
		String startStr=scan.next();
		String endStr=scan.next();
		scan.nextLine();
		
		//set集合来存储字符串
		Set<String> set = new HashSet<>();
		for(int i=0;i<n;i++) {
			String s = scan.nextLine();
			set.add(s);
		}

		int res = countPath(set,startStr,endStr);
		System.out.println(res);
		scan.close();
	}
	
	public static int countPath(Set<String> set,String startStr,String endStr) {
		//path集合来标记走过的路径,BFS是向外扩散,无向图需要记录不走回头路
		Map<String,Integer> map = new HashMap<>();
		map.put(startStr, 1);
		
		//创造队列
		Queue<String> queue = new LinkedList<>();
		queue.offer(startStr);
		int path=0;
		
		while(!queue.isEmpty()) {
			String str = queue.poll();
			path = map.get(str);
			
			for(int i=0;i<str.length();i++) {
				char[] str1 = str.toCharArray();
				//遍历26个字母求得新字符串
				for(char j='a';j<='z';j++) {
					str1[i]=j;
					String newStr = new String(str1);
					
					//当走到end字段则返回
					if(newStr.equals(endStr)) return path+1;
					
					//将路径加入map中
					if(set.contains(newStr)&&!map.containsKey(newStr)) {
						map.put(newStr,path+1);
						queue.offer(newStr);
					}
				}
			}
		}
		
		return 0;
	}

kama105.有向图的完全可达性

java 复制代码
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n=scan.nextInt();
		int m=scan.nextInt();
		
		int[][] isoland = new int[n+1][n+1];
		
		for(int i=0;i<m;i++) {
			int x = scan.nextInt();
			int y = scan.nextInt();
			isoland[x][y]=1;
		}
		
		Queue<Integer> queue = new LinkedList<>();
		queue.add(1);
		
		Set<Integer> set = new HashSet<>();
		set.add(1);
		
		while(!queue.isEmpty()) {
			int now = queue.remove();
			
			for(int i=1;i<=n;i++) {
				if(isoland[now][i]==1&&!set.contains(i)) {
					set.add(i);
					queue.add(i);
				}
			}
		}
		
		if(set.size()==n) {
			System.out.println(1);
		}else {
			System.out.println(-1);
		}
		
		scan.close();
	}

kama106.岛屿的周长

java 复制代码
	public static int[][] step = {{1,0},{0,1},{-1,0},{0,-1}};
	
	public static void main(String[] args) {
		//读取
		Scanner scan = new Scanner(System.in);
		int n=scan.nextInt();
		int m=scan.nextInt();
		
		int[][] isoland = new int[n][m];
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				isoland[i][j]=scan.nextInt();
			}
		}
		int sum=0;
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				//如果该位置是岛屿,计算边长
				if(isoland[i][j]==1) {
					int count=0;
					//上下左右
					for(int k=0;k<4;k++) {
						int k1=i+step[k][0];
						int k2=j+step[k][1];
						
						if(k1<0||k1>n-1||k2<0||k2>m-1) {
							count++;
						}else {
							if(isoland[k1][k2]==0)count++;
						}
					}
					sum+=count;
				}
			}
		}
		System.out.println(sum);
		scan.close();
	}
相关推荐
蓝色汪洋20 小时前
Completed String easy
算法
铭哥的编程日记20 小时前
贪心算法精选30道编程题 (附有图解和源码)
算法·贪心算法
CoovallyAIHub20 小时前
顶刊新发!上海交大提出PreCM:即插即用的旋转等变卷积,显著提升分割模型鲁棒性
人工智能·算法·计算机视觉
超级大只老咪20 小时前
哈希表(算法)
java·算法·哈希算法
冷月葬花~21 小时前
day24
数据结构·算法·leetcode
仰泳的熊猫1 天前
LeetCode:538. 把二叉搜索树转换为累加树/1038. 从二叉搜索树到更大和树
数据结构·c++·算法·leetcode
weixin_307779131 天前
Clickhouse导出库的表、视图、用户和角色定义的SQL语句
开发语言·数据库·算法·clickhouse·自动化
piggy侠1 天前
【GitHub每日速递 251016】23k star,Daytona:90ms内极速运行AI代码,安全弹性基础设施来袭!
算法·github
小龙报1 天前
《算法通关指南---C++编程篇(1)》
开发语言·c++·程序人生·算法·学习方法·visual studio
Cx330❀1 天前
《C++ 手搓list容器底层》:从结构原理深度解析到功能实现(附源码版)
开发语言·数据结构·c++·经验分享·算法·list