40分求助
查看原帖
40分求助
387836
dengzijun楼主2022/8/30 16:16

代码:

#include<cstdio>
#include<queue>
using namespace std;
struct node
{
	int x,y;
};
int direction[4][2]=
{
	{-1,0},
	{0,-1},
	{0,1},
	{1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
bool ans_flag;
void dfs(int x,int y)
{
	if(x==n&&y==m)
	{
		ans_flag=true;
		return;
	}
	for(int i=0;i<4;i++)
	{
		int nx=x+direction[i][0],ny=y+direction[i][1];
		if(nx<1||nx>n||ny<1||ny>m)
		{
			continue;
		}
		if(a[nx][ny]=='#'||visit[nx][ny])
		{
			continue;
		}
		visit[nx][ny]=true;
		dfs(nx,ny);
		//visit[nx][ny]=false;
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%s",a[i]+i);
	}
	visit[1][1]=true;
	dfs(1,1);
	if(ans_flag)
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}
	return 0;
}

以及BFS版本:

#include<cstdio>
#include<queue>
using namespace std;
struct node
{
	int x,y;
};
int direction[4][2]=
{
	{-1,0},
	{0,-1},
	{0,1},
	{1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
queue<node>q;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%s",a[i]+i);
	}
	q.push((node){1,1});
	while(!q.empty())
	{
		node front=q.front();
		q.pop();
		int x=front.x;
		int y=front.y;
		if(visit[x][y])
		{
			continue;
		}
		visit[x][y]=true;
		if(x==n&&y==m)
		{
			printf("Yes\n");
			return 0;
		}
		for(int i=0;i<4;i++)
		{
			int nx=x+direction[i][0];
			int ny=y+direction[i][1];
			if(nx<1||nx>n||ny<1||ny>m)
			{
				continue;
			}
			if(a[nx][ny]=='#')
			{
				continue;
			}
			q.push((node){nx,ny});
		}
	}
	printf("No\n");
	return 0;
}

这些代码都只有40分,且只有2、3、4、9测试点是AC的。

2022/8/30 16:16
加载中...