社区讨论

为什么我搜索先后还会对结果有影响?

题目总版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi7xhvh5
此快照首次捕获于
2025/11/21 05:13
4 个月前
此快照最后确认于
2025/11/21 05:13
4 个月前
查看原帖
90pts代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,maxn,minn;
int dx[]={0,1,0,-1};//出错在这
int dy[]={1,0,-1,0};
//int dx[]={1,-1,0,0};//这么定义是100pts代码
//int dy[]={0,0,1,-1};
int Map[21][21];
int vis[21][21];
int dis[21][21];
int maxd[21][21];
queue<int> qx,qy;

void mapset()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			maxd[i][j]=dis[i][j];
		}
	}
}
void bfs(int sx,int sy)
{
	int hx,hy,nx,ny;
	qx.push(sx),qy.push(sy);
	while(!qx.empty())
	{
		hx=qx.front(),hy=qy.front();
		qx.pop(),qy.pop();
		for(int i=0;i<4;i++)
		{
			nx=hx+dx[i];
			ny=hy+dy[i];
			if(1<=nx&&nx<=n&&1<=ny&&ny<=n&&(!vis[nx][ny])&&(!Map[nx][ny]))
			{
				if(nx==1&&ny==n)
				{
					minn=dis[hx][hy]+1;
					return;
				}
				vis[nx][ny]=1;
				dis[nx][ny]=dis[hx][hy]+1;
				qx.push(nx),qy.push(ny);
			}
		}
	}
}
void dfs(int sx,int sy)
{
	if(sx==1&&sy==n)
	{
		if(dis[sx][sy]>maxn)
		{
			maxn=dis[sx][sy];
			mapset();
		}
		return;
	}
	if(dis[sx][sy]>minn&&dis[sx][sy]<maxd[sx][sy])
	{
		return;
	}
	int nx,ny;
	for(int i=0;i<4;i++)
	{
		nx=sx+dx[i],ny=sy+dy[i];
		if(1<=nx&&nx<=n&&1<=ny&&ny<=n&&(!vis[nx][ny])&&(!Map[nx][ny]))
		{
			vis[nx][ny]=1;
			dis[nx][ny]=dis[sx][sy]+1;
			dfs(nx,ny);
			dis[nx][ny]=0;
			vis[nx][ny]=0;
		}
	}
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int mx,my;
		scanf("%d %d",&mx,&my);
		Map[mx][my]=1;
	}
	vis[n][1]=1;
	bfs(n,1);
	memset(vis,0,sizeof(vis));
	memset(dis,0,sizeof(dis));
	vis[n][1]=1;
	dfs(n,1);
	printf("%d\n",maxn-minn);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...