地下迷宫

news/2024/10/18 7:50:55/


import java.util.*;/*** 题目大意:n*m格迷宫,1代表青蛙可以通过,0不能通过* 青蛙体力值P,每次走一步,横向走消耗体力值1,向下走不消耗体力,* 向上走消耗体力值3.* 青蛙初始位置(0,0),迷宫出口(0,m-1)* 求青蛙走出迷宫的路径*/
public class Main {static class Node {int x;int y;int p;Node(int x, int y,int p) {this.x = x;this.y = y;this.p = p;}}static int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};static int[] cost = {3,0,1,1};static List<Node> path;public static void main(String[] arg) {Scanner scan = new Scanner(System.in);while (scan.hasNext()) {path = new ArrayList<>();int n = scan.nextInt();int m = scan.nextInt();int p = scan.nextInt();int[][] matrix = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {matrix[i][j] = scan.nextInt();}}boolean[][] isVisited = new boolean[n][m];isVisited[0][0] = true;path.add(new Node(0,0,p));boolean hasPath = dfs(matrix,isVisited,0,0,p);if (!hasPath) {System.out.println("Can not escape!");}else {int size = path.size() - 1;Node node;for (int i = 0; i < size; i++) {node = path.get(i);System.out.print("[" + node.x + "," +node.y +"],");}node = path.get(size);System.out.println("[" + node.x + "," +node.y +"]");}}scan.close();}private static boolean dfs(int[][] matrix,boolean[][] isVisited,int x, int y, int p) {int n = matrix.length;int m = matrix[0].length;if (p <= 0 && x != 0 && y != m - 1) {return false;}if (x == 0 && y == m - 1 && p >= 0) {return true;}for (int i = 0; i < 4; i++) {int nx = x + dir[i][0];int ny = y + dir[i][1];if (!isInside(n,m,nx,ny)) {continue;}if (matrix[nx][ny] == 1 && !isVisited[nx][ny]) {isVisited[nx][ny] = true;// System.out.println("push nx="+nx+" ny="+ny+" p="+(p-cost[i]));Node node = new Node(nx,ny,p-cost[i]);path.add(node);if (dfs(matrix,isVisited,nx,ny,p-cost[i])){return true;}isVisited[nx][ny] = false;// System.out.println("pop nx="+nx+" ny="+ny+" p="+(p-cost[i]));path.remove(node);}}return false;}private static boolean isInside(int n,int m,int x,int y) {return x >= 0 && x < n && y >= 0 && y < m;}
}



http://www.ppmy.cn/news/798578.html

相关文章

矿洞探险小游戏(原创)

简介 这是一款迷宫探险类小游戏&#xff0c;玩家将在一个陌生的矿洞里挖掘未知&#xff0c;捡金币和经验&#xff0c;遇到可怕的怪兽&#xff0c;或者只是空地。在过了一定时间后&#xff0c;矿洞将从白天进到黑夜&#xff08;虽然它不露天&#xff09;。当你开辟了一定大小的位…

习惯的力量之二窗户上的洞

作者&#xff1a;范军 &#xff08;Frank Fan&#xff09;新浪微博&#xff1a;frankfan7 工作努力遭批评&#xff1f; 最近忙着给一家公司作项目&#xff0c;每天在在客户办公室上班。我做IT咨询在客户所在地办公是再自然不过了&#xff0c;不同行业和规模的公司都见过不少。…

虫洞问题(最短路)

在探索他的许多农场时&#xff0c;农夫约翰发现了许多惊人的虫洞。虫洞非常奇特&#xff0c;因为它是一条单行道&#xff0c;在你进入虫洞之前的时间将你送到目的地&#xff01;FJ的每个农场都包括N&#xff08;1≤N≤500&#xff09;田地&#xff0c;编号为1。N&#xff0c;M&…

DP(01背包)——采药

#include<bits/stdc.h> using namespace std; const int N1010; int dp[N]; int main() {int T,M;cin>>T>>M;for(int i1;i<M;i){int t,v;cin>>t>>v;for(int jT;j>t;j--)dp[j]max(dp[j],dp[j-t]v);}cout<<dp[T];return 0; }

打洞,,

UDP,TCP打洞技术 内容概述&#xff1a;在p2p通信领域中&#xff0c;由NAT(Network Address Translation&#xff0c;网络地址转换)引起的问题已经众所周知了,它会导致在NAT内部的p2p客户端在无论以何种有效的公网ip都无法访问的问题。虽然目前已经发展出多种穿越NAT的技术,但相…

神奇的口袋--刚好装满背包的方法总数

描述 题目描述 有一个神奇的口袋&#xff0c;总的容积是40&#xff0c;用这个口袋可以变出一些物品&#xff0c;这些物品的总体积必须是40。John现在有n个想要得到的物品&#xff0c;每个物品的体积分别是a1&#xff0c;a2……an。John可以从这些物品中选择一些&#xff0c;如…

白天做安全,晚上去挖洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;奇安信代码卫士团队 今天带来的是Kaung Htete Aung (ris) 和 Samuel Eng (samengmg) 的故事。他们来自新加坡&#xff0c;白天在顶级技术公司当全职安全工程师&#xff0c;业余时候在挖洞。数百名白…

昆虫洞

昆虫洞 Problem Description 当农场主John在开垦他的农场时&#xff0c;发现了许多奇怪的昆虫洞。这些昆虫洞是单向的&#xff0c;并且可以从入口到出口&#xff0c;并且使得时间倒退一段。John的每个农场包含N(1≤N≤500)块地&#xff0c;编号从1~N&#xff0c;这N快地之间有M…