求!!!
查看原帖
求!!!
1121009
luoyiwen楼主2024/10/9 15:17

代码:

#include<bits/stdc++.h>
using namespace std;
long long h,w,vis[2005][2005],vis2[2005][2005],fx,fy;
char a[2005][2005];
queue<pair<long long,long long> >q;
long long dx[4]={1,-1,0,0};
long long dy[4]={0,0,1,-1};
void bfs()
{
	while(!q.empty())
	{
		long long xx=q.front().first,yy=q.front().second;
//		cout<<xx<<' '<<yy<<endl;
		q.pop();
		for(int i=0;i<4;i++)
		{
			long long nx=xx+dx[i],ny=yy+dy[i];
			if(nx>=1&&nx<=h&&ny>=1&&ny<=w&&vis[nx][ny]==0)
			{
				q.push(make_pair(nx,ny));
//				cout<<q.front().first<<' '<<q.front().second;
				vis2[nx][ny]=vis2[xx][yy]+1;
				vis[nx][ny]=1;
//				cout<<vis2[nx][ny]<<' '<<fx<<' '<<fy;
			}
		}		
	}
	return;
}
void pd(long long q,long long x,long long y)
{
	vis[x][y]=1;
	while(1)
	{	
		
		if(q==1) y--;
		if(q==2) y++;
		if(q==3) x++;
		if(q==4) x--;
		if(x<1||x>h||y<1||y>w) break;
		if(a[x][y]=='#'||a[x][y]=='<'||a[x][y]=='>'||a[x][y]=='^'||a[x][y]=='v') break;
		vis[x][y]=1;
//		cout<<x<<' '<<y<<endl;
	}
//	cout<<"#######"<<endl;
	return;
}
int main(){
	cin>>h>>w;
	for(int i=1;i<=h;i++)
	{
		for(int j=1;j<=w;j++)
		{
			cin>>a[i][j];
			
		}
	}
	for(int i=1;i<=h;i++)
	{
		for(int j=1;j<=w;j++)
		{
//			cout<<1;
			if(a[i][j]=='G') fx=i,fy=j;
			if(a[i][j]=='S') q.push(make_pair(i,j)),vis[i][j]=1;
			if(a[i][j]=='#') vis[i][j]=1;
			if(a[i][j]=='<') pd(1,i,j);
			if(a[i][j]=='>') pd(2,i,j);
			if(a[i][j]=='^') pd(3,i,j);
			if(a[i][j]=='v') pd(4,i,j);
		}
	}
//	for(int i=1;i<=h;i++)
//	{
//		for(int j=1;j<=w;j++)
//		{
//			cout<<vis[i][j]<<' ';
//		}
//		cout<<endl;
//	}
	bfs();
	if(vis2[fx][fy]==0) cout<<-1;
	else cout<<vis2[fx][fy];
	return 0;
}

改者必关!!!

2024/10/9 15:17
加载中...