题目:
给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
解析:
这道题
和前面的迷宫题很像
他唯一的不同之处
就是
只要输出
数量就可以了
所以我们只要用
题目改就可以了
网址:点击此处
我们在上一次的基础上很好改
输入稍微改一下
输出也改一下
计数器我原来就写了
所以不用改
特别简单
下面附上代码:
代码:
#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
int sum,n,m,xl,yl,xr,yr,a[1000][1000],flag[1000][1000],t,t1,t2;
int xxx[5]={0,0,-1,0,1};
int yyy[5]={0,-1,0,1,0};
void ddd(int zx,int zy)
{
for(int i=1;i<=4;i++)
{
if((zx+xxx[i]>=1)&&(zx+xxx[i]<=n)&&(zy+yyy[i]>=1)&&(zy+yyy[i]<=m)&&(a[zx+xxx[i]][zy+yyy[i]]==1)&&(flag[zx+xxx[i]][zy+yyy[i]]==0))
{
flag[zx+xxx[i]][zy+yyy[i]]=1;
if((zx+xxx[i]==xr)&&(zy+yyy[i]==yr)) sum++;
else ddd(zx+xxx[i],zy+yyy[i]);
flag[zx+xxx[i]][zy+yyy[i]]=0;
}
}
}
int main()
{
memset(flag,0,sizeof(flag));
flag[1][1]=1;
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=1;
cin>>xl>>yl;
cin>>xr>>yr;
for(int z=1;z<=t;z++)
{
cin>>t1>>t2;
a[t1][t2]=0;
}
ddd(xl,yl);
cout<<sum<<endl;
return 0;
}