20pts,TLE8个点的蒟蒻bfs求调
查看原帖
20pts,TLE8个点的蒟蒻bfs求调
357047
摸鱼ing楼主2023/6/13 18:26
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int x,y;
	Node(){}
	Node(int x,int y):x(x),y(y){}
}st;
const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
queue<Node> q;
int f[2010][2010],dis[2010][2010],n,m;
char t;
bool vis[2010][2010];
Node next(Node cur,int op){
	return Node(cur.x+dx[op],cur.y+dy[op]);
}
bool check(Node a){
	return f[a.x][a.y]&&a.x>=1&&a.x<=n&&a.y>=1&&a.y<=m&&(!vis[a.x][a.y]);
}
int bfs(Node a){
	q.push(a); dis[a.x][a.y]=0;
	while(!q.empty()){
		Node cur=q.front(); q.pop();
		vis[cur.x][cur.y]=1;
		if(f[cur.x][cur.y]==2) return dis[cur.x][cur.y];
		for(int i=0;i<4;i++){
			Node nxt=next(cur,i);
			if(check(nxt)){
				q.push(nxt);
				dis[nxt.x][nxt.y]=dis[cur.x][cur.y]+1;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			t=getchar();
			f[i][j]=(t=='#'?0:1);
			if(t=='m') st=Node(i,j);
			else if(t=='d') f[i][j]=2;
		}
		while(t!='\n'&&t!=EOF) t=getchar();
	}
	printf("%d\n",bfs(st));
	return 0;
} 

rt,感觉和题解没啥区别但只有20分?

2023/6/13 18:26
加载中...