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();
	}
相关推荐
2501_92495269几秒前
C++中的适配器模式
开发语言·c++·算法
智驱力人工智能6 分钟前
馆藏文物预防性保护依赖的图像分析技术 文物损害检测 文物破损检测 文物损害识别误报率优化方案 文物安全巡查AI系统案例 智慧文保AI监测
人工智能·算法·安全·yolo·边缘计算
wuguan_6 分钟前
Halcon中值滤波,均值滤波,高斯滤波
算法·halcon
☆5667 分钟前
C++安全编程指南
开发语言·c++·算法
tobias.b8 分钟前
机器学习 超清晰通俗讲解 + 核心算法全解(深度+易懂版)
人工智能·算法·机器学习
budingxiaomoli17 分钟前
优选算法--bfs解决FloodFill问题
算法·宽度优先
超级大只老咪23 分钟前
贪心算法对应策略
算法·贪心算法
im_AMBER28 分钟前
Leetcode 145 回文数 | 加一
数据结构·算法·leetcode
2501_9454248029 分钟前
C++构建缓存加速
开发语言·c++·算法
2401_8512729932 分钟前
多平台UI框架C++开发
开发语言·c++·算法