新手天翼
1401 迷宫经验值:800
题目描述 Description
给定一个N*M方格的迷宫,并且迷宫里有T处放置有障碍,不可通过有障碍的地方。
给定起点坐标和终点坐标,每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。
在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
输入描述 Input Description
第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。
输出描述 Output Description
给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。
样例输入 Sample Input
2 2 1 1 1 2 2 1 2
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
1≤N,M≤5
#include<iostream>
using namespace std;
int n,m,t;
int xn,xm,yn,ym,cnt;
int dis[7][7],bk[7][7];
int temp[5][2]={{0,0},{0,1},{1,0},{0,-1},{-1,0}};
bool tmp(int x,int y){
if(x>0 && x<=n && y>0 && y<=m)
return true;
return false;
}
void dfs(int x,int y){
if(x==yn&&y==ym){
cnt++;
return ;
}
int nx,ny;
for(int i=1;i<=4;++i){
nx=temp[i][0]+x;
ny=temp[i][1]+y;
if(dis[nx][ny]==0&&bk[nx][ny]==0&&tmp(nx,ny)==true){
bk[nx][ny]=1;
dfs(nx,ny);
bk[nx][ny]=0;
}
}
}
int main(){
cin>>n>>m>>t;
cin>>xn>>xm>>yn>>ym;
int a,b;
for(int i=1;i<=t;++i){
cin>>a>>b;
dis[a][b]=1;
}
dfs(xn,xm);
cout<<cnt;
return 0;
}
wa85?