大佬救救
查看原帖
大佬救救
566190
我是歌者楼主2023/7/29 20:36
#include<bits/stdc++.h>
using namespace std;
int n,m,hd[110][110],pd[110][110],vish[110][110],visp[110][110];
char mapp[110][110];
int xt[4]={0,0,1,-1};
int yt[4]={1,-1,0,0};
struct node{
	int x;
	int y;
};
void bfs1(int stx,int sty){
	node a={stx,sty};
	queue<node> q;
	q.push(a);
	int dep=0;
	hd[stx][sty]=dep;vish[stx][sty]=1;
	while(!q.empty()){
		int x=q.front().x;
		int y=q.front().y;
		q.pop();
		dep++;
		for(int i=0;i<=n;i++){
			int tx=x+xt[i];
			int ty=y+yt[i];
			if(tx<1||tx>n||ty<1||ty>m||hd[ty][tx]<=dep||mapp[tx][ty]=='X'||vish[tx][ty]==1){
				continue;
			}	
			else{
				node newn;
				newn.x=tx;
				newn.y=ty;
				q.push(newn);
				hd[tx][ty]=dep;
				vish[tx][ty]=1;
			}
		}
	}
	return ;
} 
void bfs2(int stx,int sty){
	node a={stx,sty};
	queue<node> q;
	q.push(a);
	int dep=0;
	hd[stx][sty]=dep;
	visp[stx][sty]=1;
	while(!q.empty()){
		int x=q.front().x;
		int y=q.front().y;
		q.pop();
		dep++;
		for(int i=0;i<=n;i++){
			int tx=x+xt[i];
			int ty=y+yt[i];
			if(tx<1||tx>n||ty<1||ty>m||hd[ty][tx]+1<=dep||mapp[tx][ty]=='X'||visp[tx][ty]==1){
				continue;
			}	
			else{
				node newn;
				newn.x=tx;
				newn.y=ty;
				q.push(newn);
				pd[tx][ty]=dep;
				visp[tx][ty]=1;
			}
		}
	}
	return ;
} 
int main(){
	//freopen("slikar.in","r",stdin);
	//freopen("slikar.out","w",stdout);
	cin>>n>>m;
	int edx,edy,bex,bey;
	memset(hd,0x3f3f3f,sizeof(hd));
	memset(pd,0x3f3f3f,sizeof(pd));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mapp[i][j];
			if(mapp[i][j]='S'){
				bex=i;
				bey=j;
			}
			if(mapp[i][j]='*'){
				bfs1(i,j);
			}
		}
	}
	bfs2(bex,bey);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<pd[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<hd[i][j]<<" ";
		}
		cout<<endl;
	}
	if(pd[edx][edy]==0||pd[edx][edy]>hd[edx][edy]) cout<<"KAKTUS";
	else cout<<pd[edx][edy];
	//fclose(stdin);
	//fclose(stdout);
} 
2023/7/29 20:36
加载中...