来自信友队的题目
  • 板块灌水区
  • 楼主Yezi_damn
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/8/22 21:58
  • 上次更新2024/8/23 09:40:36
查看原帖
来自信友队的题目
1426031
Yezi_damn楼主2024/8/22 21:58

rt,如果不清楚可以点开链接查看

一直 RE 40 分,我不理解

My 40pts code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Pos{
	int x,y;
};
queue<Pos> q;
int n,m,x,y,tx,ty,dis[1010][1010],x_,y_;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
bool mp[1010][1010];
bool vis[1010][1010];
int bfs(int sx,int sy)
{
	memset(dis,1e9,sizeof(dis));
	q.push((Pos){sx,sy});
	vis[sx][sy]=1;
	while(!q.empty())
	{
		x=q.front().x,y=q.front().y;
		q.pop();
		if(x==x_&&y==y_) return dis[x][y];
		for(int i=0;i<4;i++)
		{
			for(int j=1;;j<<=1)
			{
                bool flag=1;
				tx=x+dx[i]*j,ty=y+dy[i]*j;
				if(tx<=0||tx>n||ty<=0||ty>m) break;
				if(i%2) //后退的情况 
				{
					for(int gx=x;gx>=tx;gx--)
					{
						for(int gy=y;gy>=ty;gy--)
						{
							if(mp[gx][gy])
							{
								flag=0;
								break;
							}
						}
					}
				}
				else 
				{
					for(int gx=x;gx<=tx;gx++)
					{
						for(int gy=y;gy<=ty;gy++)
						{
							if(mp[gx][gy])
							{
								flag=0;
								break;
							}
						}
					}
				}
				if(!flag) break;
				dis[tx][ty]=min((long long)(dis[tx][ty]?dis[tx][ty]:1e9),dis[x][y]+1);
				vis[tx][ty]=1;
				q.push((Pos){tx,ty});
			}
		}
	}
	return -1;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			char s;
			cin>>s;
			if(s=='#') x_=i,y_=j;
			else mp[i][j]=(s=='X'?1:0);
		}
		
//	for(int i=0;i<n;i++)
//	{
//		for(int j=0;j<m;j++) cout<<mp[i][j];
//		cout<<endl;
//	}
	
	cout<<bfs(1,1);
	return 0;
}

求 debug

2024/8/22 21:58
加载中...