关注
//棋盘问题
public class Main {
static int REScount = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int[][] arr = new int[n][m];
for(int i=0;i<k;i++){
int x = sc.nextInt();
int y = sc.nextInt();
arr[x][y] = 1;
}
HashSet<String> set = new HashSet<>();
int startX = 0;
int stattY = 0;
int endX = n-1;
int endY = m-1;
process(0,arr,set,startX,stattY,endX,endY);
if(REScount == Integer.MAX_VALUE){
System.out.println(0);
}else{
System.out.println(REScount);
}
}
//
public static void process(int count,int[][] arr,HashSet<String> set,int startX,int startY,int endX,int endY){
if(startX == endX && startY == endY){//到达终点
REScount = Math.min(count, REScount);
return;
}else if( startX<0 || startX>=arr.length || startY<0 || startY>=arr[0].length){//越界
return ;
}else if(arr[startX][startY] ==1){//障碍物不能走
return;
}else {
String loc = startX+"+"+startY;
if(set.contains(loc)){//已经走过
return ;
}else{
set.add(loc);//添加次点
//上下左右走
process(count+1,arr,set,startX-1,startY,endX,endY);
process(count+1,arr,set,startX+1,startY,endX,endY);
process(count+1,arr,set,startX,startY-1,endX,endY);
process(count+1,arr,set,startX,startY+1,endX,endY);
set.remove(loc);//移除改点
}
}
}
}
查看原帖
点赞 评论
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
6660次浏览 96人参与
# 机械人避雷的岗位/公司 #
41831次浏览 279人参与
# 程序员找工作至少要刷多少题? #
12270次浏览 195人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1099次浏览 38人参与
# 我现在比当时_,你想录用我吗 #
5386次浏览 80人参与
# 过年最难忘的一件事 #
23047次浏览 174人参与
# 你最满意的offer薪资是哪家公司? #
69468次浏览 349人参与
# 为了减少AI幻觉,你注入过哪些设定? #
2538次浏览 94人参与
# 牛客AI体验站 #
4620次浏览 141人参与
# AI Coding的使用心得 #
3400次浏览 89人参与
# 找工作的破防时刻 #
253002次浏览 1960人参与
# 刚入职的你踩过哪些坑 #
5237次浏览 110人参与
# 一张图晒一下你的AI员工 #
3560次浏览 81人参与
# 论秋招对个人心气的改变 #
7048次浏览 124人参与
# 关于春招/暑期实习,你想知道哪些信息? #
5248次浏览 96人参与
# 黄金这个事上,你学到了什么 #
1206次浏览 36人参与
# 机械人你知道哪些单休企业 #
85375次浏览 428人参与
# 程序员能干到多少岁? #
6617次浏览 100人参与
# 晒晒你司的新年福利 #
5274次浏览 80人参与
# 关于提前批我想问 #
267349次浏览 2303人参与
