为什么P1605用一个数组存储访问过和障碍点会70?
查看原帖
为什么P1605用一个数组存储访问过和障碍点会70?
1246981
jiangchengzhe楼主2024/4/20 16:48
#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分

2024/4/20 16:48
加载中...