欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 每日一题(小白)回溯篇6

每日一题(小白)回溯篇6

2025/9/26 3:22:19 来源:https://blog.csdn.net/weixin_65550131/article/details/147129187  浏览:    关键词:每日一题(小白)回溯篇6

由题意得知本题是通过bfs的方法计算最终的字符串,我们可以将接收到的字符转为数字,将所有的字符减去g,循环指定的m天→若是等于0则说明这是草地向上下左右进行扩散为0,若不是草地则不进行操作.最后进行格式化输出(将所有数字输出为0输出g为其它数字输出.)。

①使用数组存储给定元素

②每循环一次终止

③循环m次达到月数限制即可

④根据题目条件设置循环内部结构

⑤按照题目规则输出答案

	static int[][]  grow= {{-1,0},{0,1},{1,0},{0,-1}};static int[][]  arr=new int[10000][10000];static char[][] c;public static void bfs() {int n=c.length;int m=c[0].length;int [][]arr2= new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr2[i][j]=arr[i][j];//System.out.print(arr[i][j]+" ");测试点}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr2[i][j]==0) {for (int k = 0; k < grow.length; k++) {if (i+grow[k][0]>=0 && j+grow[k][1]>=0 && i+grow[k][0]<n && j+grow[k][1]<m) {arr[i+grow[k][0]][j+grow[k][1]]=0;}}}}}return;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int x=scan.nextInt();int y=scan.nextInt();c=new char[x][y];scan.nextLine();for (int i = 0; i < x; i++) {String string=scan.nextLine();char[] charArray = string.toCharArray();for (int j = 0; j < y; j++) {c[i][j]=charArray[j];arr[i][j]=c[i][j]-'g';}}int m=scan.nextInt();while (m-->0) {bfs();}for (int i = 0; i < x; i++) {for (int j = 0; j < y; j++) {prints(arr[i][j]);}System.out.println();}scan.close();}public static void prints(int x) {// 打印if (x==0) {System.out.print("g");}else {System.out.print(".");}}

改善了一下,咋们可以仔细研究下上面的代码。下面的有注释👇

	static int[][]  grow= {{-1,0},{0,1},{1,0},{0,-1}};//四个方向static int[][]  arr=new int[1000][1000];//结果数组static int x,y;public static void bfs() {int [][]arr2= new int[x][y];//复制原数组for (int i = 0; i < x; i++) {for (int j = 0; j < y; j++) {arr2[i][j]=arr[i][j];//开始复制//System.out.print(arr[i][j]+" ");测试点}}for (int i = 0; i < x; i++) {for (int j = 0; j < y; j++) {if (arr2[i][j]==0) {//判断是不是青草for (int k = 0; k < grow.length; k++) {//是青草就得让它四周长起来if (i+grow[k][0]>=0 && j+grow[k][1]>=0 && i+grow[k][0]<x && j+grow[k][1]<y) {arr[i+grow[k][0]][j+grow[k][1]]=0;//四周长起来}}}}}return;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);x=scan.nextInt();//接收数据y=scan.nextInt();char[][] c = new char[x][y];scan.nextLine();for (int i = 0; i < x; i++) {//处理数据String string=scan.nextLine();char[] charArray = string.toCharArray();for (int j = 0; j < y; j++) {c[i][j]=charArray[j];arr[i][j]=c[i][j]-'g';}}int z=scan.nextInt();while (z-->0) {//几个月就循环几次bfs();//调用长草}for (int i = 0; i < x; i++) {for (int j = 0; j < y; j++) {//按格式输出prints(arr[i][j]);}System.out.println();}scan.close();}public static void prints(int x) {// 打印if (x==0) {System.out.print("g");}else {System.out.print(".");}}
输入   ←请记得删除
4 5
.g...
.....
..g..
.....
2
//输出   
gggg.
gggg.
ggggg
.ggg.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词