【题目】:给定一个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
【代码】:java
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);//几种方案 } }