问题标题: 酷町堂:1401

0
0
已解决
张展嘉
张展嘉
新手天翼
新手天翼

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?


0
0
0
0
我要回答