备战蓝桥之搜索

2024.3.12

P2802 回家 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


 



import java.awt.Checkbox;
import java.awt.PageAttributes.OriginType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;

import javax.print.attribute.standard.JobMessageFromOperator;
public class Main {	
  public static void main(String[] args) throws NumberFormatException, IOException  {
	  Scanner scanner=new Scanner(System.in);
	 BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
	 PrintWriter pw1=new PrintWriter(System.out);
     String[] aStrings=br1.readLine().split(" ");
aa=Integer.parseInt(aStrings[0]);
bb=Integer.parseInt(aStrings[1]);
cc=new int[aa][bb];
visited=new int[aa][bb];
int a,b;
for(a=0;a<aa;a++) {
	String[] bStrings=br1.readLine().split(" ");
	for(b=0;b<bb;b++) {
		cc[a][b]=Integer.parseInt(bStrings[b]);
	}
}
for(a=0;a<aa;a++) {
	for(b=0;b<bb;b++) {
		if(cc[a][b]==2) {
			startx=a;
			starty=b;
		}
		if(cc[a][b]==3) {
			
			endx=a;
			endy=b;
			
		}
	}
}
ll1.add(new dian(startx, starty, 6, 0));
visited[startx][starty]=6;
while(ll1.size()!=0) {
	dian c1=ll1.remove();
	int x=c1.x;
	int y=c1.y;
	if(x==endx&&y==endy) {
		
		System.out.println(c1.juli);
		return;
	}
	int d;
	int juli=c1.juli;
	int blue=c1.blou;
	for(d=0;d<4;d++) {
		int x1=x+xx[d];
		int y1=y+yy[d];
		int blue2=blue;
		if(x1>=0&&x1<aa&&y1>=0&&y1<bb&&blue2>1&&(cc[x1][y1]==4||cc[x1][y1]==1||cc[x1][y1]==3)) {
			blue2=blue2-1;
			if(visited[x1][y1]<blue2) {
				
				if(cc[x1][y1]==4) {
					blue2=6;
				}
				
				visited[x1][y1]=blue2;
				ll1.add(new dian(x1, y1, blue2, juli+1));
			}
		}
	}
}
System.out.println("-1");
	}
	public static int aa,bb;
	public static int startx,starty;
	public static int endx,endy;
	public static int[][] visited;
	public static int[][] cc;
	public static int[] xx= {-1,1,0,0};
	public static int[] yy= {0,0,-1,1};
	public static LinkedList<dian> ll1=new LinkedList<>();
	}
class dian{
	int x;
	int y;
	int blou;
	int juli;
	public dian(int x, int y, int blou, int juli) {
		super();
		this.x = x;
		this.y = y;
		this.blou = blou;
		this.juli = juli;
	}
	
}


package qq;

import java.awt.Checkbox;
import java.awt.PageAttributes.OriginType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
public class main {	
  public static void main(String[] args) throws NumberFormatException, IOException  {
	  Scanner scanner=new Scanner(System.in);
	 BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
	 PrintWriter pw1=new PrintWriter(System.out);
     String[] aStrings=br1.readLine().split(" ");
 bb=Integer.parseInt(aStrings[0]);
 cc=Integer.parseInt(aStrings[1]);
 visited=new int[bb][cc];
 aa=new char[bb][cc];
 int a,b;
 for(a=0;a<bb;a++) {
	aa[a]=br1.readLine().toCharArray();
 }
 for(a=0;a<bb;a++) {
	 for(b=0;b<cc;b++) {
		if(aa[a][b]=='s') {
			startx=a;
			starty=b;
		}
		if(aa[a][b]=='g') {
			endx=a;
			endy=b;
		}
	 }
 }
 ll1.add(new dian(startx, starty));
 visited[startx][starty]=1;
 while(ll1.size()!=0) {
	 dian c1=ll1.remove();
	 int x=c1.x;
	 int y=c1.y;
	 int d;
	 if(x==endx&&y==endy) {
		 System.out.println("Yes");
		 return;
	 }
	 for(d=0;d<4;d++) {
		 int x1=x+xx[d];
		 int y1=y+yy[d];
	
		 if(x1>=0&&x1<bb&&y1>=0&&y1<cc&&visited[x1][y1]==0&&(aa[x1][y1]=='.'||aa[x1][y1]=='g')) {
			 
			 visited[x1][y1]=1;
			 ll1.add(new dian(x1, y1));
		 }
	 }
 }
 System.out.println("No");
  }
public static LinkedList<dian> ll1=new LinkedList<>();
public static int[][] visited;
public static char[][] aa;
public static int[] xx= {-1,1,0,0};
public static int[] yy= {0,0,-1,1};
public static int bb,cc;
public static int startx,starty;
public static int endx,endy;
}
class dian{
	int x;
	int y;
	public dian(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值