关注
//首先接受。用char[][]数组。 //找到S的位置,找到他左手边的墙的位置,然后走下一步。 //当它的方向朝右边的时候,上面就是它左手边的墙。碰壁以后方向顺时针旋转90度。如果左手边没有墙,那么往左走。否则看前面有墙吗。 //没有的话,往前走,有的话往下走,下面如果有墙,就往左走。 //第一步:判断该点左手边是否有墙。如果没墙,往左走。如果有墙,调转方向90度,如果没墙,走,如果右墙,调转90度。 package src; import java.util.Scanner; public class Main { public static void main(String[] args) {
Scanner in = new Scanner(System.in); int num = in.nextInt(); int a =0; while (a<num) {//注意while处理多个case a++; int sum=0; int m = in.nextInt();//长 int n = in.nextInt();//高 char[][] chars = new char[n][m]; for(int i =0;i<n;i++){
String s= in.next(); for(int j=0;j<m;j++){
chars[i][j] = s.charAt(j);
}
} //开始执行循环。 //找到入口。 int entrenceX = 0; int entrenceY = 0; int exitX = 0; int exitY = 0; for(int i =0;i<n;i++){ for(int j=0;j<m;j++){ if(chars[i][j]=='S'){entrenceX = j;entrenceY=i;} if(chars[i][j]=='E'){exitX = j;exitY = i;}
}
} int curX = entrenceX; int curY = entrenceY;
String direction = null; if(curX==0)direction="right"; if(curX==m-1)direction="left"; if(curY==0)direction="down"; if(curY==n-1)direction="up"; while(!(curX==exitX&&curY==exitY)){ if(direction.equals("right")){ if(chars[curY-1][curX]=='#'){//左手边有墙 direction="down"; if(chars[curY][curX+1]=='#'){//前面有墙 direction="left"; if(chars[curY+1][curX]=='#'){//下面有墙。 direction="up";
curX--;
sum++;
direction = "left";
}else{
curY++;
sum++;
direction = "down";
}
}else{
curX++;
sum++;
direction = "right";
}
}else{
curY--;
sum++;
direction = "up";
}
}else if(direction.equals("down")){ if(chars[curY][curX+1]=='#'){//左手边有墙 direction="left"; if(chars[curY+1][curX]=='#'){//前面有墙 direction="up"; if(chars[curY][curX-1]=='#'){//下面有墙。 direction="right";
curY--;
sum++;
direction = "up";
}else{
curX--;
sum++;
direction = "left";
}
}else{
curY++;
sum++;
direction = "down";
}
}else{
curX++;
sum++;
direction = "right";
}
}else if(direction.equals("left")){ if(chars[curY+1][curX]=='#'){//左手边有墙 direction="up"; if(chars[curY][curX-1]=='#'){//前面有墙 direction="right"; if(chars[curY-1][curX]=='#'){//下面有墙。 direction="down";
curX++;
sum++;
direction = "right";
}else{
curY--;
sum++;
direction = "up";
}
}else{
curX--;
sum++;
direction = "left";
}
}else{
curY++;
sum++;
direction = "down";
}
}else if(direction.equals("up")){ if(chars[curY][curX-1]=='#'){//左手边有墙 direction="right"; if(chars[curY-1][curX]=='#'){//前面有墙 direction="down"; if(chars[curY][curX+1]=='#'){//下面有墙。 direction="left";
curY++;
sum++;
direction = "down";
}else{
curX++;
sum++;
direction = "right";
}
}else{
curY--;
sum++;
direction = "up";
}
}else{
curX--;
direction = "left";
sum++;
}
}
}
System.out.println(sum+1);
}
}
}
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 从顶到拉给所有面过的公司评分 #
19310次浏览 176人参与
# 机械人春招想让哪家公司来捞你? #
357306次浏览 3109人参与
# 为了求职,我做过的疯狂伪装 #
12265次浏览 223人参与
# 晒晒你的中秋福利 #
15150次浏览 98人参与
# 职场破冰,你们都聊什么? #
7103次浏览 69人参与
# 大家实习每天都在干啥 #
89005次浏览 518人参与
# 机械笔面试考察这些知识点 #
10410次浏览 96人参与
# 你的公司给实习生发中秋礼物吗 #
1839次浏览 30人参与
# 工作压力大怎么缓解 #
105127次浏览 1052人参与
# bilibili求职进展汇总 #
88805次浏览 806人参与
# 广联达求职进展汇总 #
10984次浏览 50人参与
# 机械人怎么评价今年的华为 #
208901次浏览 1524人参与
# 宣讲会你有哪些意向不到的收获 #
1323次浏览 21人参与
# 秋招OC许愿 #
346597次浏览 2527人参与
# 你面试被问到过哪些不会的问题? #
21474次浏览 810人参与
# 聊聊这家公司值得去吗 #
558118次浏览 3711人参与
# 电网笔面经互助 #
46698次浏览 431人参与
# 秋招的嫡长offer #
29912次浏览 279人参与
# 除了主业以外,你还有哪些其他收入? #
29402次浏览 284人参与
# 百度秋招提前批进度 #
150179次浏览 1767人参与