• 迷宫


    【题目】:给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
    【输入格式】:
    第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。
    【输出格式】:
    给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。
    输入输出样例
    输入
    2 2 1
    1 1 2 2
    1 2
    输出
    1
    【代码】:

    
    import java.util.Scanner;
    
    public class Shensouditu {
    	static int n,m,t,sx,sy,tx,ty,zx,zy,sum;
    	static int map[][]=new int[6][6];//地图
    	static int dir[][]= {{-1,0},{0,1},{0,-1},{1,0}};
    	public static boolean inmap(int x,int y)
    	{//判断是否y越界以及是否在图表中
    		return (x>=1&&x<=n&&y>=1&&y<=m);
    		
    	}
    	
    	public static void dfs(int x,int y)
    	{
    		if(x==tx&&y==ty)
    		{//判断是否到达了终点
    			sum++;return;
    		}
    		for(int i=0;i<4;i++)
    		{
    			int nx=x+dir[i][0];//进入下一个格子
    			int ny=y+dir[i][1];
    			if(inmap(nx,ny)&&map[nx][ny]!=1&&map[nx][ny]!=2)
    				/** 
    				 * 判断这个点是否在表中以及是否为障碍物以及是否走过*/
    			{
    				map[nx][ny]=2;//标记这个点已经走过
    				dfs(nx,ny);
    				map[nx][ny]=0;//清零
    			}
    		}
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in=new Scanner(System.in);
    		n=in.nextInt();m=in.nextInt();t=in.nextInt();
    		sx=in.nextInt();sy=in.nextInt();
    		tx=in.nextInt();ty=in.nextInt();
    		for(int i=0;i<t;i++)
    		{
    			zx=in.nextInt();zy=in.nextInt();
    			map[zx][zy]=1;//将障碍物设为1
    		}
    		map[sx][sy]=2;//将起点设为2以及走过的点
    		dfs(sx,sy);//开始深搜
    		System.out.println(sum);//几种方案
    
    	}
    
    
    }
    
    

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    扩展VirtualBox虚拟机磁盘容量
    Java实现莱布尼兹问题
    Java实现子序列问题
    Java实现子序列问题
    Java实现子序列问题
    Java实现子序列问题
    Java实现子序列问题
    第九届蓝桥杯JavaC组省赛真题
    第九届蓝桥杯JavaC组省赛真题
    第九届蓝桥杯JavaC组省赛真题
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/12575786.html
Copyright © 2020-2023  润新知