时间限制: 1000ms
空间限制: 32000kB
题目描述
时间限制:1s 空间限制:32M
题目描述:
给定一个 �∗�N∗M 方格的迷宫,每个方格最多经过一次,且迷宫里有 �T 处障碍,障碍处不可通过。
在迷宫中有上下左右四种移动方式,每次只能移动一个方格的距离。数据保证起点上没有障碍。
给定起点坐标和终点坐标,问: 有多少种从起点坐标到终点坐标的行走方案。
输入格式:
第一行有三个整数:N,M,T。N 为行数,M 为列数,T 为障碍总数。(1≤N,M≤5)
第二行有起点坐标SX,SY 和终点坐标 FX,FY。
接下来 T 行,每行为障碍点的坐标。
输出格式:
从起点到终点的行走方案总数。
样例输入1:
2 2 1
1 1 2 2
1 2
样例输出1:
1
标注//是我写的,剩下的是某位已经忘了的神犇(自己看是不是你的代码),注:不是上期的iwowo
c++17代码
#include <iostream>
#include <cstring>
using namespace std;
const int N = 15;
int n, m, t;
int a[N][N];
int sx, sy, fx, fy;
int ans;
void dfs(int x, int y)
{
if(x<1||y<1||x>n||y>m) return ;//
if (x == fx && y == fy)
{
ans ++ ;
return;
}
if(a[x+1][y]!=2&&a[x+1][y]!=1){//
a[x+1][y]=1;
dfs(x+1,y);
a[x+1][y]=0;
}
if(a[x][y+1]!=2&&a[x][y+1]!=1){//
a[x][y+1]=1;
dfs(x,y+1);
a[x][y+1]=0;
}
if(a[x-1][y]!=2&&a[x-1][y]!=1){//
a[x-1][y]=1;
dfs(x-1,y);
a[x-1][y]=0;
}
if(a[x][y-1]!=2&&a[x][y-1]!=1){//
a[x][y-1]=1;
dfs(x,y-1);
a[x][y-1]=0;
}
a[x][y]=0;//
return ;//
}
int main()
{
cin >> n >> m >> t;
cin >> sx >> sy >> fx >> fy;
//memset(a,0, sizeof(a));
for (int i=1;i<=t;i++ )
{
int x, y;
cin >> x >> y;
a[x][y] = 2;
}
if(a[fx][fy]==2){
cout<<0;//
return 0;//
}
a[sx][sy]=1;//
dfs(sx,sy);//
cout << ans << endl;
return 0;
}
/* 原贴代码
def on_greenflag():
sprite.direction = sprite.direction
sprite.x = sprite.x
sprite.y = sprite.y
sprite.set_costume('sprite.costume_index('number')')
sprite.set_backdrop('sprite.backdrop_index('number')')
sprite.size = sprite.size
sprite.volume = sprite.volume
while not 50 == 50:
# DO SOMETHING
pass
if 49 == 50:
sprite.stop_all()
else:
sprite.stop_other()
sprite.set_variable('1', sprite.get_variable('1'))
while True:
sprite.stop_other()
def my_1145141919810():
global my_1, my_2
my_1145141919810()
*/