迷宮(從學長那裏學到的另外一種格式,更易理解)所以記錄保存一哈

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

	}


}
相關文章
相關標籤/搜索