为什么这段代码拿不了55?
查看原帖
为什么这段代码拿不了55?
235901
Always_Remember_It楼主2022/8/10 21:31
#include <bits/stdc++.h>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define of(a,b,c) for(int a=b;a>=c;a--)
const int N=360;
int n,m,c1,c2,d;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
string a[N][N];
bool mp[N][N],vis[N][N];
struct Node{
	int x,y;
	int time;
} u;
queue<Node> Q;
inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar(); 
	}
	while(ch>='0'&&ch<='9'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*f;
}
signed main(){
	n=read();
	m=read();
	c1=read();
	c2=read();
	d=read();
	fo(i,1,n){
		fo(j,1,m){
			mp[i][j]=1;
			vis[i][j]=1;
		}
	}
	int sx=0,sy=0;
	int ex=0,ey=0;
	fo(i,1,n){
		fo(j,1,m){
			cin>>a[i][j];
		}
	}
	if(c1==0&&c2==0){
		fo(i,1,n){
			fo(j,1,m){
				char ch=a[i][j][0];
				if(ch=='S'){
					sx=i;
					sy=j;
				}
				else if(ch=='T'){
					ex=i;
					ey=j;
				}
				if(!(ch>='0'&&ch<='9')) continue;
				int len=a[i][j].size();
				a[i][j]=' '+a[i][j];
				int cnt=0;
				fo(k,1,len){
					int num=a[i][j][k]-'0';
					cnt=cnt*10+num;
				}
				fo(k,1,n){
					fo(l,1,m){
						int dis=abs(k-i);
						dis+=abs(l-j);
						if(dis<cnt){
							mp[i][j]=0;
						}
					}
				}
			}
		}
		vis[sx][sy]=0;
		Q.push((Node){sx,sy,0});
		while(!Q.empty()){
			u=Q.front();
			Q.pop();
			if(u.x==ex&&u.y==ey){
				cout<<u.time;
				cout<<" 0 0"<<endl;
				return 0;
			}
			fo(i,0,7){
				int nx=u.x+dx[i];
				int ny=u.y+dy[i];
				if(nx<1||nx>n) continue;
				if(ny<1||ny>m) continue;
				if(!mp[nx][ny]) continue;
				if(!vis[nx][ny]) continue;
				vis[nx][ny]=0;
				Q.push((Node){nx,ny,u.time+1});
			}
		}
		cout<<-1<<endl;
		return 0;
	}
	cout<<-1<<endl;
	return 0;
}
2022/8/10 21:31
加载中...