【題目】:給定一個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);//幾種方案 } }