蒟蒻代码越界了,求帮忙看看,找找问题,谢谢
查看原帖
蒟蒻代码越界了,求帮忙看看,找找问题,谢谢
372172
Q__A__Q楼主2022/7/20 17:06

qwq

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn=50;
int n,m,ans,mp[maxn][maxn],xx,yy,x,y,to;
ll dist[maxn][maxn][5];

const int dx[]= {0,0,1,-1},dy[]= {1,-1,0,0};

struct node {
	int x,y,to;
};

inline int read() {
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}

inline int bfs(int x,int y,int to) {
	memset(dist,0x7f7f7f,sizeof dist);
	priority_queue<node> pq;
	dist[x][y][to]=0;
	pq.push(node {x,y,to});
	while(!pq.empty()) {
		bool pd=0;
		node u=pq.top();
		pq.pop();
		if(u.x==xx&&u.y==yy) break;
		int nx=u.x+dx[u.to],ny=u.y+dy[u.to];
		if(mp[nx][ny]!=1) pd=1;
		if(mp[nx][ny]&&dist[nx][ny][u.to]>dist[u.x][u.y][u.to]) {
			dist[nx][ny][u.to]=dist[u.x][u.y][u.to];
			pq.push(node {nx,ny,u.to});
		}

		nx=u.x+dx[(u.to+3)%4],ny=u.y+dy[(u.to+3)%4];
		if(mp[nx][ny]!=1) pd=1;
		if(mp[nx][ny]&&dist[nx][ny][(u.to+3)%4]>dist[u.x][u.y][u.to]+1) {
			dist[nx][ny][(u.to+3)%4]=dist[u.x][u.y][u.to];
			pq.push(node {nx,ny,(u.to+3)%4});
		}

		nx=u.x+dx[(u.to+1)%4],ny=u.y+dy[(u.to+1)%4];
		if(mp[nx][ny]!=1) pd=1;
		if(mp[nx][ny]&&dist[nx][ny][(u.to+1)%4]>dist[u.x][u.y][u.to]+5) {
			dist[nx][ny][(u.to+1)%4]=dist[u.x][u.y][u.to];
			pq.push(node {nx,ny,(u.to+1)%4});
		}

		if(!pd) {
			nx=u.x+dx[(u.to+2)%4],ny=u.y+dy[(u.to+2)%4];
			if(mp[nx][ny]&&dist[nx][ny][(u.to+2)%4]>dist[u.x][u.y][u.to]+10) {
				dist[nx][ny][(u.to+2)%4]=dist[u.x][u.y][u.to];
				pq.push(node {nx,ny,(u.to+2)%4});
			}
		}
	}
}

signed main() {
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	n=read(),m=read();
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=m; ++j) {
			char ch;
			cin>>ch;
			if(ch=='.') mp[i][j]=0;
			else if(ch=='#') mp[i][j]=1;
			else if(ch=='F') mp[i][j]=3,xx=i,yy=j;
			else {
				mp[i][j]=2,x=i,y=j;
				if(ch=='E') to=1;
				else if(ch=='W') to=2;
				else if(ch=='N') to=4;
				else if(ch=='S') to=3;
			}
		}
	bfs(x,y,to);
	printf("%lld\n",dist[x][y][to]);
	return 0;
}
2022/7/20 17:06
加载中...