#include<bits/stdc++.h>
using namespace std;
int a[1000][1000];
int fw[1000][1000];
int tx[4]={-1,0,0,1};
int ty[4]={0,-1,1,0};
int n,m,k,qx,qy,zx,zy,ax,ay,sum=0;
void dfs(int x,int y)
{
if(x==zx&&y==zy)
{
sum++;
return ;
}
for(int i=0;i<=3;i++)
{
int dx=x+tx[i];
int dy=y+ty[i];
if(a[dx][dy]!=1&&fw[dx][dy]!=1&&dx>0&&dx<=n&&dy<=m&&dy>0)
{
fw[dx][dy]=1;
dfs(dx,dy);
fw[dx][dy]=0;
}
}
}
int main()
{
cin>>n>>m>>k>>qx>>qy>>zx>>zy;
fw[qx][qy]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=0;
}
}
for(int i=1;i<=k;i++)
{
cin>>ax>>ay;
a[ax][ay]=1;
}
dfs(qx,qy);
cout<<sum;
return 0;
}
使用两个数组可通过
#include<bits/stdc++.h>
using namespace std;
int a[1000][1000];
int tx[4]={-1,0,0,1};
int ty[4]={0,-1,1,0};
int n,m,k,qx,qy,zx,zy,ax,ay,sum=0;
void dfs(int x,int y)
{
if(x==zx&&y==zy)
{
sum++;
return ;
}
for(int i=0;i<=3;i++)
{
int dx=x+tx[i];
int dy=y+ty[i];
if(a[dx][dy]!=1&&a[dx][dy]!=2&&dx>0&&dx<=n&&dy<=m&&dy>0)
{
a[dx][dy]=2;
dfs(dx,dy);
a[dx][dy]=0;
}
}
}
int main()
{
cin>>n>>m>>k>>qx>>qy>>zx>>zy;
a[qx][qy]=2;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=0;
}
}
for(int i=1;i<=k;i++)
{
cin>>ax>>ay;
a[ax][ay]=1;
}
dfs(qx,qy);
cout<<sum;
return 0;
}
使用一个数组只有70分