60分求调
查看原帖
60分求调
730157
UnknownPeople楼主2024/4/18 22:07

60分记录
调了半天,实在是调不出来了,该考虑的也考虑了,求大佬指正

#include<iostream>
#include<queue>
using namespace std;
struct node{
	int x,y,c;
};
char map[55][55];
int ti[55][55];
int b[55][55];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m;
	cin>>n>>m;
	queue<node>q;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>map[i][j];
			if(map[i][j]=='*')
				q.push((node){i,j,0}),b[i][j]=1;
			else if(map[i][j]=='D')
				ti[i][j]=n*m*10;
		}
	while(!q.empty()){
		node t=q.front();
		q.pop();
		ti[t.x][t.y]=t.c;
		for(int i=0;i<4;i++){
			int tx=t.x+dx[i];
			int ty=t.y+dy[i];
			if(tx<1||ty<1||tx>n||ty>m||b[tx][ty]||map[tx][ty]=='D'||map[tx][ty]=='X')
				continue;
			b[tx][ty]=1;
			q.push((node){tx,ty,t.c+1});
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			b[i][j]=0;
			if(map[i][j]=='S')
				q.push((node){i,j,0}),b[i][j]=1;
		}
	while(!q.empty()){
		node t=q.front();
		q.pop();
		if(map[t.x][t.y]=='D'){
			cout<<t.c;
			return 0;
		}
		for(int i=0;i<4;i++){
			int tx=t.x+dx[i];
			int ty=t.y+dy[i];
			if(tx<1||ty<1||tx>n||ty>m||b[tx][ty]||ti[tx][ty]<=t.c+1||map[tx][ty]=='X')
				continue;
			b[tx][ty]=1;
			q.push((node){tx,ty,t.c+1});
		}
	}
	cout<<"KAKTUS";
	return 0;
}
2024/4/18 22:07
加载中...